はじめに
Alexaは、『声』という直感的なインターフェイスを使って様々なサービスを利用することができます。
利用するサービスは自分で『スキル』を構築することにより拡張でき、オリジナルのサービスをAlexaを通して利用することができます。
ここでは、Twilioを使ってSMSを送信するAlexaスキルの作り方を紹介します。Lambdaを使わないので、AWSアカウントは必要ありません。
前提
この記事では以下を前提としています。
- Alexa 開発者アカウントを持っている(https://developer.amazon.com/ja/alexa からサインインできる)
- Twilioアカウントを持っている
- もしTwilioアカウントをもっていない場合は、https://jp.twilio.com/try-twilio/kddi-webからサインアップしてください。
目次
- SMS送信用の電話番号を取る
- Alexaスキルを作る
- スキルの呼び出し名、インテントを設定する
- Twilio FunctionでSMS送信処理部分をつくる
- AlexaスキルとTwilio Functionをつなぎこむ
- テスト
1. SMS送信用の電話番号を取る
Twilioコンソールにこちらからログインします。
左のメニューから『Phone Numbers』を選択し、『番号の管理』から『番号を購入』(+ボタン)を選択します。
Twilioでは、日本の番号からSMSを送信することができません。アメリカ番号(+1で始まる番号)を購入する必要があります。そのため、『COUNTRY』では『United States』を選択し、『機能』で『SMS』にチェックを入れて検索してください。
検索結果に表示された番号の中から好きなものを選び、『購入』ボタンをクリックして購入してください。
2. Alexaスキルを作る
Alexaデベロッパーコンソールにこちらからサインインします。
『スキルを作成』ボタンをクリックし、スキル作成画面に遷移します。
スキル名、デフォルトの言語(日本語)、スキルに追加するモデル(カスタム)を選択し、『スキルを作成』ボタンをクリックすると、新しいスキルが作成できます。
3. スキルの呼び出し名、インテントを設定する
スキルの管理画面で、左のメニューから『呼び出し名』を選択します。
呼び出し名は、『アレクサ、〇〇で■■して』とAlexaに話しかけたときの『〇〇』にあたる部分です。
好きな名前を入力してください(今回は『おくるくん』とします)。入力したら、『モデルを保存』ボタンで入力値を保存します。
次に、左メニューのインテントで『追加』をクリックします。
インテントは、『アレクサ、〇〇で■■して』とユーザーからリクエストを受けたあと、そのリクエストに対応して行われる処理のことを指します(詳細については、こちらをご参照ください)。
『追加』をクリックすると、インテントの名前入力欄が表示されます。インテントの名前はこの後作成するTwilio Functionのコードでも使用しますので、アルファベットの大文字、小文字、アンダースコアのみを使い、わかりやすい名前をつけてください(今回は『SendSms』とします)。
名前の入力後、『カスタムインテントを作成』をクリックします。
カスタムインテントの作成後、そのインテントの詳細設定画面に遷移します。ここでは『サンプル発話』を入力します。
サンプル発話は、『アレクサ、〇〇で■■して』の『■■して』の部分にあたります。サンプル発話に登録した内容がAlexaにリクエストされると、サンプル発話が登録されているインテントが実行されます。
ここではサンプル発話を一つ入力します(実際にAlexaスキルを作成する場合は、表記ゆれを考慮し複数のパターンの発話を登録する必要があります)。
サンプル発話を入力したら、エンターキーで登録ができます。登録後、『モデルを保存』ボタンで入力値を保存します。
4. Twilio FunctionでSMS送信処理部分をつくる
次に、Twilioコンソールで左メニューから『Runtime』>『Functions』を選択します。
Functionsの『Configure』メニューを選び、『Enable ACCOUNT_SID and AUTH_TOKEN』にチェックを入れます。
次に、『Environmental Variables』に以下のキーと値を追加します。
- APP_ID
スキルIDを入力します。
スキルIDは、AlexaデベロッパーコンソールのAlexaスキル一覧画面で『スキルIDの表示』から取得できます。
- TWILIO_SMS_FROM_NUMBER
手順1で取得したTwilioのSMS送信用電話番号を入力します。
なお、このとき電話番号はE.164形式で入力します。E.164形式の電話番号は、Twilioコンソールで『Phone Numbers』>『番号の管理』で該当番号をクリックし、表示される詳細画面の『電話番号』で確認できます。
- TWILIO_SMS_TO_NUMBER
SMSの送信先の電話番号です。同じくE.164形式で入力します。例えば、080-1234-5678に送信したいときは、+818012345678と入力します。
また、Twilioアカウントがトライアルアカウントの場合、SMS送信先に指定できるのはTwilioアカウント作成時に入力した電話番号だけです。
最後に、Dependenciesでモジュールを追加します。Nameに『alexa-sdk』、バージョンに『1.0.25』と入力します。
終わったら、『Save』ボタンをクリックして入力値を保存します。
次に、Functionコンソールで『+』ボタンをクリックし、Functionを作成します。タイプは『Blank』を選び、『Create』をクリックします。
Functionの編集画面に移動するので、『FUNCTION NAME』と『PATH』を入力します。
『ACCESS CONTROL』と『EVENT』は特に入力する必要はありません。
『CODE』の部分には以下のコードを貼り付けます。
const Alexa = require('alexa-sdk');
const HELP_MESSAGE = 'エスエムエスを送信できます。おくるくん、エスエムエスを送ってと言ってみてください';
const MESSAGE_BODY = 'こんにちは! AlexaからのSMSです';
const SENT_MESSAGE = 'エスエムエスを送信しました。';
const HELP_REPROMPT = '何ができますか?';
const STOP_MESSAGE = 'さようなら';
const handlers = {
'LaunchRequest': function () {
this.emit(':ask', HELP_MESSAGE, HELP_MESSAGE);
},
'SendSms': function () {
const client = this.context.getTwilioClient();
client.messages
.create({
body: MESSAGE_BODY,
from: this.context.TWILIO_SMS_FROM_NUMBER,
to: this.context.TWILIO_SMS_TO_NUMBER
})
.then(message => {
console.log(message.sid);
this.response.speak(SENT_MESSAGE);
this.emit(':responseReady');
})
},
'AMAZON.HelpIntent': function () {
const speechOutput = HELP_MESSAGE;
const reprompt = HELP_REPROMPT;
this.response.speak(speechOutput).listen(reprompt);
this.emit(':responseReady');
},
'AMAZON.CancelIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
'AMAZON.StopIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
'Unhandled': function () {
this.response.speak(HELP_MESSAGE);
this.emit(':responseReady');
},
};
exports.handler = function (context, event, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.appId = context.APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
};
(コード内の'SendSms'が、手順3で作成したインテントと対応する処理です。)
終わったら、『Save』ボタンをクリックしてFunctionを保存・デプロイします。
デプロイ完了後、『PATH』のURLをコピーしてメモしておきます。このURLは手順5で使用します。
5. AlexaスキルとTwilio Functionをつなぎこむ
Alexaデベロッパーコンソールで左メニューの『エンドポイント』を選択します。
『サービスのエンドポイントの種類』で『HTTPS』を選択し、『デフォルトの地域』に手順4で作成したFunctionのURLを入力します。
証明書は、『開発用のエンドポイントは、証明機関が発行したワイルドカード証明書を持つドメインのサブドメインです』を選択します。
入力が終わったら『エンドポイントを保存』ボタンで入力値を保存します。
6. テスト
Alexaデベロッパーコンソールの上部メニューで『ビルド』を選択し、『モデルをビルド』をクリックします。
ビルド完了までには数分かかり、完了したらそのメッセージが表示されます。
ビルドが完了したら『テスト』を選択します。もしスキルのテストが無効になっていた場合は有効化します。
入力欄に『アレクサ、{呼び出し名}で{サンプル発話}』と入力します。例えば、『呼び出し名』に『おくるくん』、『サンプル発話』に『エスエムエスを送って』と入力していたら、『アレクサ、おくるくんでエスエムエスを送って』と入力します。
すると処理が実行され、SMSが送信されてきます。
これでSMSを送信するAlexaスキルの作成は完了です。
Twilio SDKについて
今回、Twilio FunctionではTwilioのSDKを利用してSMSを送信しています。
TwilioSDKでは、SMS以外にも『電話をかける』『LINEやFacebook Messangerにメッセージを送る』『プッシュ通知』『Faxを送る』など様々な機能を簡単に利用することができます。
Alexaスキル開発にTwilioを利用し、様々なコミュニケーション機能を組み込んでみてください。
ほかにもいくつかの例を用意しました。参考になれば幸いです。