[Twilio+Zendesk] Twilio に SIP 接続して Zendesk のチケットを作成する

[Twilio+Zendesk] Twilio に SIP 接続して Zendesk のチケットを作成する

Twilio の SIP 接続機能と音声認識を活用し、通話内容を自動で文字起こしして Zendesk にチケットとして登録する方法を解説します。Studio Flow と Functions を使ってノーコード/ローコードで構築でき、SIP クライアントからの発信で動作確認が可能です。Zendesk API との連携により、通話対応の自動記録・業務効率化が実現できます。

対象読者

  • LINE コール Plus などの SIP 接続で Zendesk API にアクセスしたい人
  • Twilio + Zendesk 連携の実装例に興味がある人
  • Twilio の音声認識機能の応用例に興味がある人

概要

この記事では、 Twilio が SIP 接続で受け取った音声の内容を認識し、 Zendesk チケット化する方法について解説します。

9

全体としては次のような流れになります。

  • Twilio コンソールの Functions で Zendesk API をコールする実装を作成する
  • Twilio コンソールの Studio で SIP 音声を文字起こしする Flow を実装する
  • Twilio コンソールの Voice SIP Domains で Domain を作成する

SIP 接続とは

SIP(Session Initiation Protocol)は、インターネット上で音声通話を行うための通信プロトコルです。LINE コール Plus などの VoIP サービスは、SIP を使って通話を制御します。

Twilio とは

Twilio は、音声通話・SMS・チャットなどの通信機能を API 経由で提供するクラウドサービスです。GUI で通話フローを構築できる Studio や、サーバーレス実行環境の Functions などが利用できます。

Zendesk とは

Zendesk は、カスタマーサポート向けのクラウド型 CRM プラットフォームです。API を通じてチケットの作成や更新が可能で、Twilio との連携により通話内容をサポートチケットとして記録できます。

Function の作成

Twilio コンソール の Functions にアクセスします。 Service を任意の名前で作成し、エディタの画面に遷移したら Create your function をクリックします。

2

Function 名は任意のもので構いません。 function を作成したら、次の内容を入力し、 Save をクリックして保存します。

const axios = require('axios');

exports.handler = async function(context, event, callback) {
  const transcript = event.SpeechResult || "(音声認識結果なし)";
  const from = event.From;
  const to = event.To;

  const zendeskDomain = context.ZENDESK_DOMAIN;
  const zendeskEmail = context.ZENDESK_EMAIL;
  const zendeskToken = context.ZENDESK_API_TOKEN;

  const auth = Buffer.from(`${zendeskEmail}/token:${zendeskToken}`).toString('base64');

  try {
    await axios.post(
      `https://${zendeskDomain}/api/v2/tickets.json`,
      {
        ticket: {
          subject: "音声入力による問い合わせ",
          comment: {
            body: `発信者: ${from}\n着信先: ${to}\n\n--- 音声認識結果 ---\n${transcript}`
          }
        }
      },
      {
        headers: {
          Authorization: `Basic ${auth}`,
          'Content-Type': 'application/json'
        }
      }
    );

    return callback(null, { status: 'success' });
  } catch (err) {
    console.error(err);
    return callback(null, { status: 'error', message: err.message });
  }
};

3

Settings & More > Environment Variables` をクリックし、 Key と Value に次の内容を登録します。

Key Value 説明
ZENDESK_DOMAIN ****.zendesk.com Zendesk で利用しているドメイン
ZENDESK_EMAIL your_email@example.com Zendesk で登録しているメールアドレス
ZENDESK_API_TOKEN **** Zendesk で取得した API トークン

Key と Value の入力が完了したら Deploy All をクリックし変更を反映します。

4

Flow の作成

Twilio Studio にアクセスし、新しい Flow を作成します。名前は任意のもので構いません。 Start from scratch を選択し、空の Flow を作成します。

右のオプションから Gather Input on Call をドラッグアンドドロップして配置します。プロパティを次のように設定します。

項目 設定内容
Widget name gather
Say or play message Say a message
Text to say ご用件をお話しください。
Language type Default
Language Japanese
Message voice Default
Number of loops 1
Stop gathering after (Seconds) 5 Seconds
Stop gathering on keypress? チェックを外す
Stop gathering after (Digits) 入力不要
Speech recognition language Japanese(Japan)

他はデフォルトのままで構いません。プロパティの設定が完了したら、 Save をクリックして保存し、 Trigger の Incoming Call から gather に接続します。

次に、 Run Function をドラッグアンドドロップで配置します。プロパティを次のように設定します。

項目 設定内容
Widget name function
Service 先に作成した Twilio Functions の Service
Environment ui
Function 先に作成した Function
Function Parameters 後述

Function Parameters に次の Key と Value を登録します。

Key Value 補足
SpeechResult {{widgets.gather.SpeechResult}} gather の部分は、先に作成した Gather Input on Call の Widget name と揃えてください
From {{trigger.call.From}} 発信者の SIP アドレス
To {{trigger.call.To}} 着信先の SIP アドレス

プロパティの設定が完了したら、 Save をクリックして保存し、 gather の User Said Something から function に接続します。

10

最終的に Flow が上のようになっていれば問題ありません。 Publish を押して変更を反映します。

SIP Domain の作成

Voice SIP Domains にアクセスします。新しい SIP Domain を作成し、次のように設定します。

項目 設定内容 補足
Properties
Friendly Name 任意のもの Twilio コンソール上で表示される名前なので自由で構いません
SIP URI 任意のもの 通話に使用する URI です。既存の URI と重複しないものである必要があります
Voice Authentication
IP Access Control Lists 任意の ACL 通話を許可する IP アドレスのリスト。未作成の場合は作成します
Credential Lists 任意の認証情報 通話を許可する認証情報のリスト。未作成の場合は作成します
Call Control Configuration
A Call Comes in Studio - 先に作成した Flow 通話を受け取ったときに呼び出す Flow を選択します

他はデフォルトのままで構いません。入力が完了したら Save をクリックし SIP Domain を作成します。

7

これで手順はすべて完了です。

動作確認

検証用 SIP クライアントから sip:アカウント名@SIP Domain の URI に発信し、 Zendesk にチケットが作成されることを確認します。

sip:your-username@your-sip-domain.sip.twilio.com

8

まとめ

Twilio を用いることで、SIP 接続を受け取るアプリケーションが GUI 上の操作でローコードで実現できることが分かりました。今回は Zendesk との連携を紹介しましたが、Twilio Functions を用いることでさまざまな API と組み合わせることが可能です。今後も Twilio Functions を利用したアプリケーションについて執筆予定ですので、お楽しみに!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.