LoginSignup
6
4

More than 5 years have passed since last update.

Lambda不要!SMSを送信するAlexaスキルを作る

Last updated at Posted at 2018-07-05

はじめに

Alexaは、『声』という直感的なインターフェイスを使って様々なサービスを利用することができます。
利用するサービスは自分で『スキル』を構築することにより拡張でき、オリジナルのサービスをAlexaを通して利用することができます。
ここでは、Twilioを使ってSMSを送信するAlexaスキルの作り方を紹介します。Lambdaを使わないので、AWSアカウントは必要ありません。

前提

この記事では以下を前提としています。

目次

  1. SMS送信用の電話番号を取る
  2. Alexaスキルを作る
  3. スキルの呼び出し名、インテントを設定する
  4. Twilio FunctionでSMS送信処理部分をつくる
  5. AlexaスキルとTwilio Functionをつなぎこむ
  6. テスト

1. SMS送信用の電話番号を取る

Twilioコンソールにこちらからログインします。

左のメニューから『Phone Numbers』を選択し、『番号の管理』から『番号を購入』(+ボタン)を選択します。

phone_number_menu.png

Twilioでは、日本の番号からSMSを送信することができません。アメリカ番号(+1で始まる番号)を購入する必要があります。そのため、『COUNTRY』では『United States』を選択し、『機能』で『SMS』にチェックを入れて検索してください。

phone_number_search.png

検索結果に表示された番号の中から好きなものを選び、『購入』ボタンをクリックして購入してください。

phone_number_purchase.png

2. Alexaスキルを作る

Alexaデベロッパーコンソールにこちらからサインインします。
『スキルを作成』ボタンをクリックし、スキル作成画面に遷移します。

skill_create.png

スキル名、デフォルトの言語(日本語)、スキルに追加するモデル(カスタム)を選択し、『スキルを作成』ボタンをクリックすると、新しいスキルが作成できます。

skill_create_finish.png

3. スキルの呼び出し名、インテントを設定する

スキルの管理画面で、左のメニューから『呼び出し名』を選択します。

skill_call_name.png

呼び出し名は、『アレクサ、〇〇で■■して』と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を利用し、様々なコミュニケーション機能を組み込んでみてください。

ほかにもいくつかの例を用意しました。参考になれば幸いです。

AlexaにTwilioを使用してコミュニケーション機能を組み込む

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4