前回はAlexa、会社に連絡をして
と話しかけることでSlackに通知するアプリを作成しました。
ですが、このアプリ経由だと「誰からのメッセージなのか」がわからないので、環境変数で名前を設定する必要がある為、ユーザ毎にLambdaファンクションを登録する必要がありました。
別に公開するとかそういうのではないのですが、ソースコード上に設定値をハードコードしている感じがして雑な感じです。もう少しいい感じにならないかと探していると、Alexaからアクセストークン取得できるんですね。 SlackでもOAuth使えるので、取得したTokenを元にWeb APIを呼び出すことで認証したユーザとして書き込めます。今回はこっちでやってみましょう。
1. Slackのアプリ登録
- SlackのApplication管理画面より、
Create New App
をクリックします App Name
とWorkspace
を設定して、Create App
をクリックします- 機能 - OAuth & 権限 の スコープの設定セクションで、権限スコープの選択に
メッセージをユーザーとして送信します chat:write:user
を設定し、変更を保存する
をクリックします - OAuth トークン & 転送 URLセクションで、
ワークスペースへのアプリのインストール
をクリックします - アクセス許可画面にて、
許可する
をクリックします - 基本情報 - アプリの認証情報セクションで、
クライアントID
とクライアントシークレット
が表示されます(後で使用します)
2. Lambdaファンクション登録
Skillが呼ばれた時にアクセスtokenが渡されるようになる為、それを使用して環境変数で指定したチャンネルへメッセージを登録します。詳しくはソースコードをご覧ください。
こんな感じで登録してください
環境変数として、書き込むChannelのIDやメッセージの設定が必要です
3. Alexa Skill登録
3-1. スキル情報
グローバルフィールドは全て「いいえ」を設定します
3-2. 対話モデル
3-3. 設定
サービスエンドポイントのタイプ
にはAWS Lambda の ARN (Amazonリソースネーム)
デフォルト
にはLambdaファンクションのARN
を設定します。また、アカウントリンクの設定をはい
にして、必要な情報を設定します。
- 認証 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を保存する
をクリックします
5. リンクを有効化
管理画面を開いて有効にする
をクリックするとアクセスを許可するか確認する画面が表示されるので、許可する
をクリックします。
6. 話しかけてみる
Alexa、スラックに通知をして
と話しかけることで、Slackに通知が行く筈です。
有効化した時のアカウントからのメッセージとして登録されていますね!
まとめ
リンクを有効化した時のアカウントからのメッセージとして登録されるので、環境変数で名前を設定することから解放されました。 ですが、まだユーザ毎にカスタマイズできると良いものがありますね。そう、チャンネルIDとメッセージ本文です。個別のパラメータとしてどうにか送れないかな...