Twilio で LINE WORKS から SMS 送受信

## SMS が好きな人と LINE WORKS からやり取りする

LINE WORKS を中心にビジネスのやり取りをしています。お客さんや関係者さんとのコミュニケーション手段は様々です。LINE WORKS のトークも使いますが、電話、E-mail、Web 会議でのやり取りもあります。

そして SMS が主たる連絡手段という方もいます。携帯電話会社やその販売店の方達に多いですね。

SMS も LINE WORKS でやり取りできたらなという事で、Twilio API を使って LINE WORKS の Bot でやり取り可能にしてみました。

Microsoft Power Automate のクラウド フローを利用しています。

## 動作の様子
Twilio で取得した電話番号宛てに SMS が届くと、LINE WORKS の Bot とのトークルームにメッセージが転送されます。メッセージには返信ボタンがあります。これをクリックして返信メッセージを入力すると、Twilio 経由で相手に SMS で返信されます。

https://twitter.com/i/status/1548198314901852162

## Power Automate のクラウド フロー
Microsoft Power Automate に Twilio SMS のコネクターがあったので、それを利用してみました。

ソリューションに、SMS 受信と SMS 送信の 2 種類のクラウド フローを作成しています。

![l_147288799_3_c61c421e432b9543683911a52798cb6e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/95c31013-caf0-4734-9ffe-28569f9f567e.png)

LINE WORKS の Bot API の botId, token, userId を、環境変数として作成しています。

### SMS 受信のクラウド フロー

#### Twilio からの Webhook で SMS を受信

[HTTP 要求の受信時] をトリガーにします。"HTTP POST の URL" は、Twilio の Console で Incoming Message の "Send a webhook" の "Request URL" で利用します。

![l_147288799_4_6e84b4bf4e19593d724e841ac02b3791.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/37d3219e-1bdb-512d-1c21-5ecdb971d4cb.png)

"JSON スキーマ" は以下です。

```
{
    "type": "object",
    "properties": {
        "$content-type": {
            "type": "string"
        },
        "$content": {
            "type": "string"
        },
        "$formdata": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "key": {
                        "type": "string"
                    },
                    "value": {
                        "type": "string"
                    }
                },
                "required": [
                    "key",
                    "value"
                ]
            }
        }
    }
}
```

#### 受信メッセージから差出人と本文を取り出す

受信メッセージの差出人と本文を格納するため、[変数を初期化する] アクションを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/8fa83f27-1a29-d716-7cef-e6c21726fd8b.png)

受信メッセージの差出人と本文を取り出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/8179f108-6634-2732-abb1-9c18f7daa448.png)

スイッチで Key が "Body" と "From" の Value をそれぞれ変数に格納しています。

![l_147288799_7_371d4a07a967e0957e5cfd79d1a716f3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/6361153e-75f2-7023-251b-461c452d4119.png)

#### LINE WORKS のボタン テンプレート でメッセージを転送する

[HTTP] アクションで LINE WORKS の Bot API のリクエストを行います。
ボタン テンプレート形式のメッセージで、返信動作のためのボタンを表示します。

![l_147288799_8_3974e18c53adc89f6aa2562bc697cb0a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/9b9db140-76b1-f930-bd2b-ba3112d2d781.png)

ボタン テンプレートの送信例。

![l_147288799_18_4fd6ac53ce20ba262749e198e50515e5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/c134a3ad-945d-20b0-8653-02e69e634855.png)


### SMS 送信のクラウド フロー

#### LINE WORKS トークルームの Bot 宛てメッセージを受信

[HTTP 要求の受信時] をトリガーにします。"HTTP POST の URL" は、LINE WORKS の Developer Console で Bot の Callback URL として利用します。

![l_147288799_9_502fa0ec7abf8bb8f9b757ae283227ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/29b92f3e-8d9b-e90e-c6ec-6a1bc8445808.png)

"JSON スキーマ" は以下です。

```
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string"
        },
        "source": {
            "type": "object",
            "properties": {
                "userId": {
                    "type": "string"
                },
                "channelId": {
                    "type": "string"
                },
                "domainId": {
                    "type": "integer"
                }
            }
        },
        "issuedTime": {
            "type": "string"
        },
        "content": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string"
                },
                "text": {
                    "type": "string"
                },
                "postback": {
                    "type": "string"
                }
            }
        }
    }
}
```
#### 受信メッセージが postback のデータを含むかの条件で分岐

SMS 転送時のボタン テンプレートのボタンをクリックした場合は postback が送られます。テキストが入力されたときには含まれません。[条件] のアクションで分岐します。

![l_147288799_10_b453d3a548c7cdb1dc36c699e215945e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/ecc90ada-8d91-1ba6-1b35-41d3296ccc55.png)

#### [はいの場合] 返信ボタンのクリックだった場合は、メッセージ入力を促す

[HTTP] アクションで LINE WORKS の Bot API のリクエストを行います。
テキスト形式のメッセージで、返信メッセージ入力を促します。

![l_147288799_11_b96495a8b5e245ec70a2c8a4befd5407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/0e15b4ba-02fc-42b9-4e96-f8f3cdec959e.png)

Excel のテーブルに返信メッセージ待ちの行を追加。

![l_147288799_12_ebeb6afc4d2c4ee1efd077dfd0e1d614.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/04ebb6d5-211e-f26c-9b84-d223cee076f0.png)

#### [いいえの場合] 返信メッセージの入力だった場合は SMS を返信

Excel のテーブルの行の取得で、メッセージ待ちの行を取得。

![l_147288799_13_6f05f708c248da3415232d5a6a4fe8e6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/8473a27e-1354-9d9d-22f5-0bbd3c0a6c87.png)

Twilio の "携帯ショートメール(SMS)送信" のアクションで SMS 送信。

![l_147288799_14_be792220ccb756b763d53d12f4b29388.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/8a610310-a8c8-54eb-5567-e86989c66aa1.png)

SMS 送信が行われたら、テーブルの行を削除。

![l_147288799_15_38fb3a1b2f60db460674d63b3ba8e209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/bf3a5052-e1e0-e1b9-72c7-19cf9b53461f.png)

## Twilio

Twilio の SMS 機能を利用します。コンソールから Messaging Service の設定をします。

Messaging Service の Sender pool で該当の Sender を開き、A MESSAGE COMES IN の Webhook に Power Automate の "HTTP 要求の受信" で生成された URL を指定します。

![l_147288799_17_71fef1ba470d75ccd90511b4fdcb290a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/07c9e27e-4b05-bc30-b6ed-8fdfcb443f09.png)

## LINE WORKS の Bot の設定

Developer Console で Bot を登録します。

![l_147288799_2_1a6b35eb43681232beaae9b7a5931842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/b192400a-b6bd-08f9-b891-2d0d4b4aa0ee.png)

Callback URL には、Power Automate の "HTTP 要求の受信" で生成された URL を指定します。

設定は以上です。

## 動作確認
SMS を Twilio の電話番号宛てに送信すると、LINE WORKS の Bot からメッセージが配信されます。返信ボタンのクリックで、送信者に返信できます。