概要
enebularで、alexaスキルのwebhookを返してみた。
herokuに、デプロイしてみた。
サービスリクエストをスクラッチで組み立てて、plunkerから、叩いてみた。
開発コンソールのjsonを投入した。
投入したjson
{
"version": "1.0",
"session": {
"new": false,
"sessionId": "amzn1.echo-api.session.31db7f13-8893-4fdc-85af-79e3943329e6",
"application": {
"applicationId": "amzn1.ask.skill.0d47d688-d29a-4138-b062-b4e202fd4a0d"
},
"attributes": {
"count": 1
},
"user": {
"userId": "amzn1.ask.account.AELQE6NLBLT4OKBA3T6MEEFYGY5HHOOVC53Y6CXTPCYWJPEQE7YGYC6LHPYYEBM7DLQLP2UEMC7RJQGXAEKEVFWTKJ4JMXC37MIKZRADBKQ6V2CGYQ2U4H6TWA4JMWPUNNEE3WSRAICOZ77KTQOBEK224BQQIAALLFU425ZN6TB7ZTHP5Y3GOIA33PUK2QV6I5YALLVOUSIKKDY"
}
},
"context": {
"Viewports": [
{
"type": "APL",
"id": "main",
"shape": "RECTANGLE",
"dpi": 213,
"presentationType": "STANDARD",
"canRotate": false,
"configuration": {
"current": {
"mode": "HUB",
"video": {
"codecs": [
"H_264_42",
"H_264_41"
]
},
"size": {
"type": "DISCRETE",
"pixelWidth": 1280,
"pixelHeight": 800
}
}
}
}
],
"Viewport": {
"experiences": [
{
"arcMinuteWidth": 346,
"arcMinuteHeight": 216,
"canRotate": false,
"canResize": false
}
],
"mode": "HUB",
"shape": "RECTANGLE",
"pixelWidth": 1280,
"pixelHeight": 800,
"dpi": 213,
"currentPixelWidth": 1280,
"currentPixelHeight": 800,
"touch": [
"SINGLE"
],
"video": {
"codecs": [
"H_264_42",
"H_264_41"
]
}
},
"Extensions": {
"available": {
"aplext:backstack:10": {}
}
},
"System": {
"application": {
"applicationId": "amzn1.ask.skill.0d47d688-d29a-4138-b062-b4e202fd4a0d"
},
"user": {
"userId": "amzn1.ask.account.AELQE6NLBLT4OKBA3T6MEEFYGY5HHOOVC53Y6CXTPCYWJPEQE7YGYC6LHPYYEBM7DLQLP2UEMC7RJQGXAEKEVFWTKJ4JMXC37MIKZRADBKQ6V2CGYQ2U4H6TWA4JMWPUNNEE3WSRAICOZ77KTQOBEK224BQQIAALLFU425ZN6TB7ZTHP5Y3GOIA33PUK2QV6I5YALLVOUSIKKDY"
},
"device": {
"deviceId": "amzn1.ask.device.AHQL6YEO2I6LOPNL2CEPQ65JPYU5IZHOWAWH6YHKHTPHEHYMMILRM3CLOV7FIKVSO2EZMSPLW2YFQRCNXWDIXY7ZAJD73AJ4GFTSSINKCLG2AFZWYXHXWDPPJPVBBC6NFPCEYAK5LF7R57672MYUEDWORMF3WOLWGZ77PXSIX3PJ2KOITDBQO",
"supportedInterfaces": {}
},
"apiEndpoint": "https://api.fe.amazonalexa.com",
"apiAccessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5mZS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLjBkNDdkNjg4LWQyOWEtNDEzOC1iMDYyLWI0ZTIwMmZkNGEwZCIsImV4cCI6MTY2MDc5MDA3OCwiaWF0IjoxNjYwNzg5Nzc4LCJuYmYiOjE2NjA3ODk3NzgsInByaXZhdGVDbGFpbXMiOnsiY29udGV4dCI6IkFBQUFBQUFBQXdDdTlNNmV0dWFHeTNFUWtRQ2hHR2szS2dFQUFBQUFBQURTZjJraFJ3d2NSZW1tU1pkcDdLTzZYdFVTMHJUMTRySDBPallwYmdrcTA0ejZVVWVtVTRJNlNGdXdtV0FnVHgvRE5YUE5keDVIbjdjN0dqZ1cxRklwRGJjc2ZVc0JuQkZ2dG5TQVVRWXBEYkt6NE9PbG1ETG9MYVFnb0RHVktTbzlDR3FyTTlFcll6TmdsSElROTlNalR6cklCd1Rob050UEIwRlp0UFhBVDZTaWRXUUwzR1FURzJCYmY0bVMvYS81SFlRUlFGb3Z1TlYzcWUrK3RicGRzRlNFK04vSXFqck5kU2pPNnBPOGdJU0N5VHgvbmYxZmF1VjBFZURqaDYzKzd1Ky9XNmFRVFFOaGNqNXBBbXpuY1Z2MGZGYnlvbnQrclluNU9jTzN6d2UzUFkycDVydlVzd2lGcTRIOFhQMWZVL3dBUzFEbzkyQWxjQ0dmcmxhL0FKMFNGcnJ0VGErMExxdmJYZ2RwUjBSVDFYVGZmSmNOL3J0UFNERC9xdW1DMmRsY0MzdmtLNzk4IiwiZGV2aWNlSWQiOiJhbXpuMS5hc2suZGV2aWNlLkFIUUw2WUVPMkk2TE9QTkwyQ0VQUTY1SlBZVTVJWkhPV0FXSDZZSEtIVFBIRUhZTU1JTFJNM0NMT1Y3RklLVlNPMkVaTVNQTFcyWUZRUkNOWFdESVhZN1pBSkQ3M0FKNEdGVFNTSU5LQ0xHMkFGWldZWEhYV0RQUEpQVkJCQzZORlBDRVlBSzVMRjdSNTc2NzJNWVVFRFdPUk1GM1dPTFdHWjc3UFhTSVgzUEoyS09JVERCUU8iLCJ1c2VySWQiOiJhbXpuMS5hc2suYWNjb3VudC5BRUxRRTZOTEJMVDRPS0JBM1Q2TUVFRllHWTVISE9PVkM1M1k2Q1hUUENZV0pQRVFFN1lHWUM2TEhQWVlFQk03RExRTFAyVUVNQzdSSlFHWEFFS0VWRldUS0o0Sk1YQzM3TUlLWlJBREJLUTZWMkNHWVEyVTRINlRXQTRKTVdQVU5ORUUzV1NSQUlDT1o3N0tUUU9CRUsyMjRCUVFJQUFMTEZVNDI1Wk42VEI3WlRIUDVZM0dPSUEzM1BVSzJRVjZJNVlBTExWT1VTSUtLRFkifX0.Vg3j1G0YRg_dMC9PPKODLFDSiNpp40fL_aH2SPYd3FCGRZprHIkshWX56e5MLksXT_ad5LHsOPyYm_gZHjZlZL1PIa3lqreFphOdfYhqe0S3wkbZVtJuLvpse0CFzeJWnyp1eroKR8p-1ztj1AK8l7IHxWbcfeehPYo4UkjMhYsk1wxdJq8Eh_m5BQXqbmGRBIo2q9MnCxBFvE5scut7JufFFIdIPe3AvEBEPfJPXQsunfiJ4w6iC5vlqKq276sFG3ZJ-oqzaOJTf6FOZjQZovlhke27MaeFTqBPf_NI3HCoKiMG7xgT0TSUmtdtbcVgfi7HwkUAMdgjI-37Hme1_w"
}
},
"request": {
"type": "IntentRequest",
"requestId": "amzn1.echo-api.request.1f7d99c5-9771-4b43-be84-6af35ffc09fc",
"locale": "ja-JP",
"timestamp": "2022-08-18T02:29:38Z",
"intent": {
"name": "GenkiIntent",
"confirmationStatus": "NONE",
"slots": {
"GenkiSlot": {
"name": "GenkiSlot",
"value": "元気",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.0d47d688-d29a-4138-b062-b4e202fd4a0d.GenkiSlot",
"status": {
"code": "ER_SUCCESS_MATCH"
},
"values": [
{
"value": {
"name": "元気",
"id": "b41ff10402a0a2db20fe42c55c0295e6"
}
}
]
}
]
},
"confirmationStatus": "NONE",
"source": "USER",
"slotValue": {
"type": "Simple",
"value": "元気",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.0d47d688-d29a-4138-b062-b4e202fd4a0d.GenkiSlot",
"status": {
"code": "ER_SUCCESS_MATCH"
},
"values": [
{
"value": {
"name": "元気",
"id": "b41ff10402a0a2db20fe42c55c0295e6"
}
}
]
}
]
}
}
}
}
}
}
}
実行結果
{"version":"1.0","sessionAttributes":{"count":"2"},"response":{"outputSpeech":{"type":"PlainText","text":"1 回目です。やたら、元気です。"},"card":{"type":"Simple","title":"カードここに書く","content":"今日は新しいことを学ぶチャンスが訪れるでしょう。 それをやり通せば可能性は無限です。"},"reprompt":{"outputSpeech":{"type":"PlainText","text":"他にも質問はありますか?"}},"shouldEndSession":false}}
成果物
以上。