Flexプラグイン Tips（タスクの情報画面をカスタマイズ）

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズのTwilioエバンジェリストの高橋です。

本記事では、オペレーターが着信時に、タスクのより詳細な情報を確認することができるように、タスクの情報（Info）タブの内容をカスタマイズする方法について説明します。

# シナリオ

今回のカスタマイズにおける完成イメージは以下のようになります。
![スクリーンショット 2022-08-29 9.34.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/d5091225-bb8b-e76a-cf54-dcc08a6b2b61.png)

着信時に、タスクリストの該当タスクをクリックすると、タスクの詳細パネルが表示されます。その中の情報（Info）タブに任意の情報を表示させるというシナリオです。

# Flex UIコンポーネント

今回情報を表示させたいのは、`TaskInfoPanel`になります。
リファレンスは[こちら](https://assets.flex.twilio.com/docs/releases/flex-ui/1.31.2/TaskInfoPanel.html)です。

![スクリーンショット 2022-08-29 11.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/7f80143c-72e9-7a12-37f7-df27edd899fd.png)

このコンポーネントには、`Context`メンバーが存在しますので、以下のようなコードを使って、パネルの内容を独自コンテンツに書き換えることができます。

```javascript
    flex.TaskInfoPanel.Content.replace(
      <TaskInfo defaultProps={defaultProps} key='task-info-component' />,
    );
```

このコードを、プラグインの`init()`の中に記載します。
なお、実際の書き換えコンテンツとなる`TaskInfo`は後ほどReactコンポーネントとして作成する必要があります。

# ハンズオン

では早速プラグインを実装していきましょう。

## プラグインのダウンロード

https://github.com/mobilebiz/plugin-task-info

```sh
% git clone https://github.com/mobilebiz/plugin-task-info.git
% cd plugin-task-info
```

## コンテンツの修正

情報（Info）パネルのコンテンツは、`src/components/TaskInfo/TaskInfo.jsx`に記載していきます。

```javascript:TaskInfo.jsx
import React from 'react';

const TaskInfo = (props) => {
  const { task, defaultProps } = props;
  if (!task || !defaultProps) return null;

  // Change second line.
  defaultProps.secondLine = 'Can you change this line.';

  // console.log(`🐞 task`);
  // console.dir(task);

  return (
    <div>
      <h1>TASK CONTEXT</h1>
      <p>Can you write some message at this area.</p>
      <p>And links can also be placed as follows.</p>
      <a href='https://www.google.com/' target='_blank'>
        Google
      </a>
      <hr />
      <p>dateCreated: {task.dateCreated.toTimeString()}</p>
      <p>name: {task.attributes.name}</p>
    </div>
  );
};

export default TaskInfo;
```

`defaultProps.secondLine`に値を入れると、タスクアイテムリストの二行目に独自のコンテンツを上書きすることができます。また、サンプルにはないですが、通常`task.attributes.from`が表示される一行目は、`defaultProps.firstLine`で変更ができます。
![スクリーンショット 2022-08-29 14.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/c882dc65-ccec-5cd5-e680-64bd1acaefec.png)


情報（Info）パネルのコンテンツは、`return`の中で指定していきます。
現在は、以下のHTMLが設定されています。

```html
    <div>
      <h1>TASK CONTEXT</h1>
      <p>Can you write some message at this area.</p>
      <p>And links can also be placed as follows.</p>
      <a href='https://www.google.com/' target='_blank'>
        Google
      </a>
      <hr />
      <p>dateCreated: {task.dateCreated.toTimeString()}</p>
      <p>name: {task.attributes.name}</p>
    </div>
```

`TaskInfo`コンポーネントの引数に、`task`オブジェクトが入っているので、そちらを使うことで上記のように、タスクが生成された日時や、アトリビュートの値などを表示させることができます。
あとは応用次第ですね。

# まとめ

今回は非常にサクッとした解説になっていますが、タスクの情報パネルは意外と色々な情報を書き込むことができますので、使い方次第ではCRM連携の代わりにもなるかと思います。

---
### Twilio（トゥイリオ）とは

https://cloudapi.kddi-web.com
Twilioは音声通話、メッセージング（SMS/チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

自己紹介|　
:--|:--
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/b51a8b88-abd5-ce5e-195a-de3564ba2ae6.png" height='200' width='150'/>|高橋克己（Katsumi Takahashi） 自称「<font color='red'>赤い芸人</font>」<br />グローバル・インターネット・ジャパン株式会社　代表取締役<br />株式会社KDDIウェブコミュニケーションズ　Twilio事業部エバンジェリスト<br /><br />2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりTwilio事業部にジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。<br />2019 Twilio Champions