Alexa買い物リストに登録した内容をDynalistに反映

#Alexa買い物リストに登録した内容をDynalistに反映

Amazon Alexaには買い物リストという機能があり便利そうなのですが、私の場合ToDoやメモ、買う物などはDynalistにまとめているため、見る場所が2つになるとどちらかを見忘れることになりかねません。

うまく連携できたらAlexaの買い物リストも使えるんだけどなあと考えていましたが、IFTTTに「買い物リストに追加した時」というthisがあったため、わりと簡単に実現できることに気が付きました。DynalistはIFTTTに対応していませんが、WebAPI経由で編集ができるため、ThatにWebHooksを指定することで連携できます。

以下、IFTTTとDynalistのアカウントは持っている前提で話を進めます。

##Dynalistのtokenを取得

まずはDynalistのAPIを使用するためのtokenを取得します。

[DynalistのDeveloperページ](https://dynalist.io/developer)でSecret tokenを取得できます。![](https://qiita-image-store.s3.amazonaws.com/0/351810/e4a38d40-6cdc-667a-ef18-d3f2179c7ec1.png)

##IFTTTの設定

IFTTTで以下のように指定します。

1. New Appletを選択![](https://qiita-image-store.s3.amazonaws.com/0/351810/98fea679-707e-1fab-6c14-2298f8c6ff70.png)
1. Thisに「Amazon Alexa」を指定![](https://qiita-image-store.s3.amazonaws.com/0/351810/bbf67d5c-8bdf-1bd1-0265-2214903dc9bd.png)![](https://qiita-image-store.s3.amazonaws.com/0/351810/84f51671-05f3-7202-34ba-1e52ec58f404.png)
1. 「Item added to your Shopping List」を選択![](https://qiita-image-store.s3.amazonaws.com/0/351810/8c9c43f8-f5c5-79bb-27c5-00e6838f3029.png)
1. Thatに「Webhooks」を指定!![](https://qiita-image-store.s3.amazonaws.com/0/351810/ffb11c4b-b509-8326-9a51-dbb30b1290e6.png)![](https://qiita-image-store.s3.amazonaws.com/0/351810/d715d393-1f16-8b4a-9aa2-f2678d7cefb9.png)
1. 「Make a web request」を選択![](https://qiita-image-store.s3.amazonaws.com/0/351810/025b1363-54f8-3a21-fc2b-1be515cb6366.png)


するとwebhook設定を記入する画面になります。![](https://qiita-image-store.s3.amazonaws.com/0/351810/375da74f-f75c-d9ca-6e78-50d8a906a8fe.png)

私の場合はDynalistをメインで使用しており、Alexa買い物リストからDynalistへ一方的に登録さえできれば良いので、そのように設定します。

[Dynalist APIページ](https://apidocs.dynalist.io/#make-change-to-the-content-of-a-document)を参考に埋めていきます。![](https://qiita-image-store.s3.amazonaws.com/0/351810/7d51cde8-c964-052e-5e54-d46ba8e8a081.png)

<dl>
  <dt>URL</dt><dd>https://dynalist.io/api/v1/doc/edit</dd>
  <dt>Method</dt><dd>POST</dd>
  <dt>Content Type</dt><dd>application/json</dd>
</dl>

Body部分は以下のように設定します。

```json
{
  "token":"*******",
  "file_id":"xxxxxxxxxxxxxxxxxxxxxxxx",
  "changes":[
    {
      "action":"insert",
      "parent_id":"yyyyyyyyyyyyyyyyyyyyyyyy",
      "content":"{{AddedItem}}",
      "note":"{{AddedTime}}",
      "index":-1
    }
  ]
}
```

<dl>
  <dt>token</dt><dd>先程取得したtokenを指定。</dd>
  <dt>file_id</dt><dd>Dynalistのどのファイルに登録するのかを指定。取得方法は後述。</dd>
  <dt>action</dt><dd>登録するので<code>insert</code>を指定。</dd>
  <dt>parent_id</dt><dd>どのアイテムの下に登録するのかを指定。取得方法は後述。</dd>
  <dt>content</dt><dd>買い物リストの内容そのまま登録したいので<code>{{AddedItem}}</code>を指定。</dd>
  <dt>note</dt><dd>ノート部分に記載される内容なので、登録時刻<code>{{AddedTime}}</code>を指定。</dd>
  <dt>index</dt><dd>リストの最後に登録したいため、<code>-1</code>を指定。最初に登録したい場合は<code>0</code>を指定する。</dd>
</dl>

###file_idとparent_idの取得方法

Dynalist上で登録したいアイテムのメニューを開き![](https://qiita-image-store.s3.amazonaws.com/0/351810/2aafa683-eae2-a2f4-df64-5c731281576f.png)
、「Get Link」を選択すると、![](https://qiita-image-store.s3.amazonaws.com/0/351810/56710527-7ce6-bcd1-65de-a897179f4ef5.png)
以下のようなURLが取得できます。![](https://qiita-image-store.s3.amazonaws.com/0/351810/20be7c0b-e72f-bfb1-5748-68ea78a6293e.png)


```
https://dynalist.io/d/xxxxxxxxxxxxxxxxxxxxxxxx#z=yyyyyyyyyyyyyyyyyyyyyyyy
```

xxxxxxxxxxxxxxxxxxxxxxxx部分がfile_id、yyyyyyyyyyyyyyyyyyyyyyyy部分がparent_idとなりますので、BODY内にそのまま指定します。

##完成

Alexaに「買い物リストにxxxを追加して」と言ってみて、Dynalistに登録されたら成功です。

Alexa側の買い物リストは溜まる一方なので、適当に時期を見て削除しましょう。