Amazon Connect 로 아웃바운드콜 전화하기

![amazon-connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/faa4f246-9b0f-1c7d-ce2e-a1fbb70a9d0a.png)
# TL;DR
> Slack 장애 발생을 전화로 전달받고 싶었습니다.
> Amazon Connect의 OutBoundCall(아웃바운드콜) 을 활용해서 구현해보았습니다.
> 전체 과정에서 `Lambda > Amazon Connect > Phone` 부분을 기록하였습니다.

# Amazon Connect 설정
Amazon Connect > 인스턴스 추가
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/dbfd425d-e4e7-66c3-9fe8-f29168635d45.png)
(고유의) 액세스 URL을 지정 (예: `betahelloworld`)  > 다음
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/7321cfbc-6fec-4d49-1236-c916c960dc10.png)
※ 액세스 URL이 고유값이 아니면 최종 단계에서 인스턴스가 추가되지 않습니다. (예: `helloworld` 경우)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/b30a0c7e-3f61-91b1-553c-3ca60c732dea.png)
텔레포니 설정 > 발신 통화 허용만 체크 > 다음
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/10a5df5c-4e21-9415-896b-6f10a693ec26.png)
관리자 정보 입력 > 다음 > 데이터 스토리지 > 다음 > 인스턴스 생성
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/ef711a33-0fd3-2bf4-8a9a-78d562f115c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/0b2e5b0e-3359-b948-1801-892059c002bf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/3b640b22-c046-9065-2150-3feead364788.png)
배너확인 : betahelloworld 인스턴스 설정 중 (5분 내외 소요됩니다) > 성공! > 액세스 URL 클릭
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/b54b67af-a6d0-26d2-d5b8-01c509b485af.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/4dbeee7c-03dd-5a98-c8f0-e814d8974591.png)
Amazon Connect 인스턴스가 생성되었습니다. 인스턴스의 설정이 필요합니다.

액세스 URL (예: https://betahelloworld.my.connect.aws) > 로그인 > 언어 변경 (한국어)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/a8793dbc-59ec-bcb2-42be-454567dd044f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/b95388ca-763d-61f3-7d3b-fe3947d776e8.png)
대시보드 > 1. 통신 채널 탐색 > 시작
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/2fdb37be-8345-2ae7-0f69-6020934a9521.png)
국가 : 미국, 유형 : DID, 전화번호 : 택1 > 다음 > Continue
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/99492ffe-dead-6ce1-559b-ce4ff36a0b68.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/5869a5c0-46ef-7b3f-11f6-db20fc864c86.png)

고객 응대 흐름 (전화 워크플로우) 를 생성합니다.
대시보드 > 라우팅 > 고객 응대 흐름 > 고객 응대 흐름 생성
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/a2c9dfa8-d00b-cd9b-6a8f-0488fd71bfd5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/050d1a8b-5ea2-a80c-4fe3-e9b5931cb6fa.png)
`음성설정`, `재생 프롬프트`, `연결 해제` 를 추가합니다.

설정 > 음성설정 추가 (드래그앤드랍)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/589be080-cd33-f168-b05f-e519686a975b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/2d6813e8-808c-0915-ffb5-cf63d260301a.png)
상호 작용 > 재생 프롬프트
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/a5369156-21a8-3ad3-f909-b04a0f96d7ec.png)
종료/전송 > 연결 해제
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/915f7c7f-e5e7-57e6-1b63-9bc4eddc0d82.png)
총 4단계인데요. 
각 단계별로 연결해줍니다. (아래 그림처럼 마우스를 가져가면 선으로 연결할 수 있습니다)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/acad915d-21ee-9eac-fa81-a7a2c9300451.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/14e69316-87b4-12b7-e47a-29298d5085ff.png)
음성 설정 클릭 > 언어 : 한국어, 음성 : Seoyeon > Slave
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/6543884e-5f19-fcbf-4d8e-308859a0b338.png)
재생 프롬프트 클릭 > 텍스트 투 스피치 또는 채팅 텍스트 > 텍스트 입력 > Save
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/ac3438d0-8ed5-87ae-52cd-79aca4549e81.png)
고객 응대 흐름 이름 입력 (예: lambda to my phone) > 저장 > 게시
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/2b8e647c-ea3e-a558-e7ed-1b8ab20a757b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/5679c3ef-1caf-2ada-ed57-073e826ceff0.png)
아마존 커넥트 설정 끝났습니다.

# lambda 설정
lambda 하나를 생성합니다. 
(예: send-to-amazon-connect-flex-v20220304, 런타임 : Node.js 14.x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/3c75ff6b-aaa7-859b-f429-d4fc9d2ee5a3.png)
코드 작성
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/5f6799fa-ceee-1041-f1fa-474dcb59d21a.png)

```javascript
const AWS = require('aws-sdk');
var connect = new AWS.Connect();

exports.handler = (event, context, callback) => {
    //define parameter values to use in initiating the outbound call

    var params = {
        ContactFlowId: "3fae2ea0-4d77-4000-859d-1234567890", // 고유값. 아래 참조
        DestinationPhoneNumber: "+821012341234", // 수신자 전화 번호
        InstanceId: "49a9ba9c-cda0-4637-93d9-82f1234567890", // 고유값. 아래 참조
        SourcePhoneNumber: "+13348101880" // 아마존 커넥트에서 발급 받은 미국 전화번호
    };

    // method used to initiate the outbound call from Amazon Connect
    connect.startOutboundVoiceContact(params, function(err, data) {
        if (err) console.log(err, err.stack) ;
        else console.log(data);
    });

    callback(null, event);

};
```
고객 응대 흐름 (예: lambda to my phone) > 우측 마우스 > 링크 주소 복사 > `ContactFlowId`, `InstanceId` 확인 및 코드 복붙
```
https://betahelloworld.my.connect.aws/contact-flows/edit?id=arn:aws:connect:ap-northeast-2:385423560848:instance/<InstanceId>/contact-flow/<ContactFlowId>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/0d0f880c-0b6f-24e7-74d1-6c26aeade2bd.png)


람다에서 아마존 커넥트를 실행하려면 추가로 권한 추가가 필요합니다. `connect:StartOutboundVoiceContact`
람다 > 구성 > 권한 > 역할 이름 클릭
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/95c83ffe-7796-44bf-2391-3b4fae3a00c0.png)
권한 추가 > 인라인 정책 생성 > JSON > 정책 검토 > 이름 입력 (예: using-amazon-connect) > 정책 생성 > 정책 추가됨 확인
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/02f0aba1-c1de-98d4-ac84-0f1c59d9c37f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/55b33a8e-f78e-3f0c-051a-480d50b4fe14.png)

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "connect:StartOutboundVoiceContact",
            "Resource": "*"
        }
    ]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/6aee6621-8217-c2d5-711f-e3ed8cba9995.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/e54ef70c-1bd2-3567-8bdb-5ff53667adc0.png)

이제 람다 설정도 모두 완료되었습니다.
코드 > Test > Execution results 확인 > 정상 로그 확인 > 전화옴 ㅋㅋ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/9297d07c-cba7-6e3a-1b0d-e737ef82f8da.png)

# 결과화면
<iframe width="560" height="500" src="https://www.youtube.com/embed/Zy5HZ2WusdM" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# 참고
- https://aws.amazon.com/blogs/contact-center/automating-outbound-calling-to-customers-using-amazon-connect/ 
- https://blog.hbsmith.io/amazon-connect%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-outbound-call-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0-93ab4ed39f57