ボクココ

個人開発に関するテックブログ

Twilio での LINE Call API の実装まとめ

ども、@kimihom です。

f:id:cevid_cpp:20181216135254j:plain

今回、LINE Call API を使って実装する機会があったので、技術的な部分にフォーカスを当ててまとめてみる。あくまで執筆時点での記事ということを了承いただければ幸いである。

www.linebiz.com

Twilio SIP ドメインの作成

Twilio と LINE のコールを成立させるには、Twilio の SIP の機能を利用する必要がある。この SIP ドメインの登録は、全て API を通じて行うことができるので、一つ一つサブアカウント入ってクリックしながら登録するより API でパッと作れるように実装しておくことをお勧めする。

以下が流れの概要。

  • こちら側で Twilio の Sip ドメインを登録する
  • 作った Sip ドメインの SID を Twilio 側へ伝える
  • LINE <-> Twilio 間で接続してもらうまで待つ
  • 開設後、実際に通話ができるようになるようにこちらでデータ登録や UI 表示などをする

こちら側では Twilio REST API で登録だけするだけで OK となる。

SIP ドメインの登録

SIP ドメインの登録はこちらで決めてこちらで作成し、作ったのを先方に伝えるという流れとなる。

def create_line_credentials domain
  domain = twilio_client.sip.domains.create(
    friendly_name: domain,
    domain_name: domain,
    voice_fallback_url: "https://~~/fallback"
  )
  credential_list = twilio_client.sip.ip_access_control_lists.create(friendly_name: 'line-call')
  ['IP アドレス1', 'IP アドレス2'].each_with_index do |ip, i|
    ip_address = twilio_client.sip.ip_access_control_lists(credential_list.sid).ip_addresses
      .create(friendly_name: "IP#{i}", ip_address: ip, cidr_prefix_length: 32)
  end
  twilio_client.sip.domains(domain.sid).auth.calls.ip_access_control_list_mappings
    .create(ip_access_control_list_sid: credential_list.sid)
end

上記を実行すればひとまず Twilio 側に SIP ドメインのベースが作られる。ドメインは 今 Twilio で使われていないドメインであれば登録が可能なので適当に決めて登録する。 なお、 LINE Call API と繋げるためには IP アドレスでのクレデンシャル登録が必要になる。この情報は先方から教えてもらったのをそのまま登録する流れになる。

Twilio といえば着信時に URL を指定して TwiML を返すって流れだが、sip_domains を作るときに action を指定しても、この段階ではまだ LINE <-> Twilio 間で接続が完了していないので登録しても通話できないことに注意しよう。

最終的に作成した SIP URI と Account SID を先方に伝えて待とう。

開設後にこちら側のデータ登録や UI 表示

無事開設されたとなったら、実際に使えるようにデータ登録や UI 表示を行う。 作成した SIP ドメインに Request URL を登録して、着信した時の TwiML を返すようにしよう。この点だけでいえば、通常の Twilio 電話番号を購入した時の挙動と同じだ。

ただ、以下のような点が通常の Twilio 電話番号とは異なる点なので注意しよう。

  • Twilio 上で表示されるTo 番号が実際には存在しない電話番号の表記になる。この番号を使って発信 Call はかけられない。
  • 着信を固定番号等へ転送する場合は、他の Twilio Phone Number を caller_id として登録する必要がある。転送された固定番号にはその番号として表示される。
  • LINE アカウントへこちらから発信するのは不可
  • [SipHeader_X-User-To-User] っていうパラメータが Twilio に渡ってくる。これをパースすることで LINE ID を取得できる
  • LINE からの From 番号(LINE で登録された電話番号)は SIP 形式で表示される。これは FC-GW などの 通常の SIP コールを使った場合と同じ。

参考: Twilio で 03 番号を利用する方法 - ボクココ

終わりに

技術的な部分としては、SIP ドメインを登録するのと同じ要領で実装が可能だ。お客さん側では発信無料でしかも LINE 内で通話できるってことで、利便性は高い。

もし利用に興味があるという場合には CallConnect 側に記事があるので 併せて参照いただけると幸いである。

callconnect.zendesk.com

本記事では技術のみの紹介として締めておく。