Amazon EchoからSlackに通知を出してみた(Web API版)

前回Alexa、会社に連絡をしてと話しかけることでSlackに通知するアプリを作成しました。 ですが、このアプリ経由だと「誰からのメッセージなのか」がわからないので、環境変数名前を設定する必要がある為、ユーザ毎にLambdaファンクションを登録する必要がありました。

別に公開するとかそういうのではないのですが、ソースコード上に設定値をハードコードしている感じがして雑な感じです。もう少しいい感じにならないかと探していると、Alexaからアクセストークン取得できるんですね。 SlackでもOAuth使えるので、取得したTokenを元にWeb APIを呼び出すことで認証したユーザとして書き込めます。今回はこっちでやってみましょう。

1. Slackのアプリ登録

  1. SlackのApplication管理画面より、Create New Appをクリックします
  2. App NameWorkspaceを設定して、Create Appをクリックします f:id:nemuzuka:20180109122426p:plain
  3. 機能 - OAuth & 権限 の スコープの設定セクションで、権限スコープの選択に メッセージをユーザーとして送信します chat:write:user を設定し、変更を保存するをクリックします f:id:nemuzuka:20180109122457p:plain
  4. OAuth トークン & 転送 URLセクションで、ワークスペースへのアプリのインストールをクリックします f:id:nemuzuka:20180109122512p:plain
  5. アクセス許可画面にて、許可するをクリックします f:id:nemuzuka:20180109122525p:plain
  6. 基本情報 - アプリの認証情報セクションで、クライアントIDクライアントシークレットが表示されます(後で使用します) f:id:nemuzuka:20180109123248p:plain

2. Lambdaファンクション登録

Skillが呼ばれた時にアクセスtokenが渡されるようになる為、それを使用して環境変数で指定したチャンネルへメッセージを登録します。詳しくはソースコードをご覧ください。

こんな感じで登録してください f:id:nemuzuka:20180109122613p:plain

環境変数として、書き込むChannelのIDやメッセージの設定が必要です f:id:nemuzuka:20180109123402p:plain

3. Alexa Skill登録

3-1. スキル情報

f:id:nemuzuka:20180109122651p:plain グローバルフィールドは全て「いいえ」を設定します

3-2. 対話モデル

インテントスキーマとサンプル発話に設定します。

これとかこちらを参考にしてください

3-3. 設定

  • サービスエンドポイントのタイプ には AWS Lambda の ARN (Amazonリソースネーム)
  • デフォルトにはLambdaファンクションのARN

を設定します。また、アカウントリンクの設定をはいにして、必要な情報を設定します。 f:id:nemuzuka:20180109122706p:plain

  • 認証 URL https://slack.com/oauth/authorize
  • クライアント ID Slackの基本情報 - アプリの認証情報セクション内のクライアントID
  • スコープ 今回はchat:write:user
  • リダイレクトURL この項目は、Slackの設定に必要です
  • 認可の承諾タイプ Auth Code Grant
  • アクセストークンURL https://slack.com/api/oauth.access
  • クライアントシークレット Slackの基本情報 - アプリの認証情報セクション内のクライアントシークレット
  • クライアント認証スキーム リクエストボディの資格情報

4. Slackのリダイレクト先を設定

Slackの 機能 - OAuth & 権限 の リダイレクトURLセクションで、Alexa SkillのリダイレクトURLを全て設定し、URLを保存するをクリックします f:id:nemuzuka:20180109122720p:plain

5. リンクを有効化

f:id:nemuzuka:20180109122735p:plain 管理画面を開いて有効にするをクリックするとアクセスを許可するか確認する画面が表示されるので、許可するをクリックします。 f:id:nemuzuka:20180109122753p:plain

f:id:nemuzuka:20180109122807p:plain

6. 話しかけてみる

Alexa、スラックに通知をしてと話しかけることで、Slackに通知が行く筈です。

f:id:nemuzuka:20180109122821p:plain

有効化した時のアカウントからのメッセージとして登録されていますね!

まとめ

リンクを有効化した時のアカウントからのメッセージとして登録されるので、環境変数で名前を設定することから解放されました。 ですが、まだユーザ毎にカスタマイズできると良いものがありますね。そう、チャンネルIDとメッセージ本文です。個別のパラメータとしてどうにか送れないかな...