728x90

[1탄] https://honeystorage.tistory.com/188?category=748845

[2탄] https://honeystorage.tistory.com/189?category=748845

[3탄] https://honeystorage.tistory.com/190

 

1, 2, 3탄에 이어서 포스팅을 진행해보겠습니다.

앞서 1, 2, 3탄에서는 선행 작업과 템플릿, 암호화서명에 대해서 알아봤습니다.

 

자, 이제 마무리입니다.

API연동을 진행함에 있어 Docs를 안볼수는 없겠죠?

https://apidocs.ncloud.com/ko/ai-application-service/sens/alimtalk_v2/

 

우리가  참고할 파트는 메시지 발송입니다.

단일 메시지 발송과 멀티 메시지 발송의 차이는 수신자를 한명만 두느냐, 여러명 두느냐 정도의 차이밖에 없습니다.

따라서, 우리는 단일 메시지 발송에 포커스하여 진행해보도록 하겠습니다.

 

"Mandatory"라고 표기된 값들이 필수값인데요.

그외의 것들은 API요청때 없어도 되는것들입니다. 우리는 "Mandatory"만 파라미터로해서 요청을 날려보도록 하겠습니다.

 

순서는 다음과 같습니다.

1. 암호화서명 함수를 만든다. (3탄에서 진행했습니다.)

2. template코드에 따라 적절한 parameter를 생성해주는 함수를 만든다.

3. 요청한다.

 

"Mandatory" 항목중에 templateCode가 있습니다.

해당 templateCode를 통해 우리의 요청이 어떤 템플릿에 대응되는것인지를 알려주는것입니다.

 

서비스를 운영하면서 템플릿을 한개만 쓰는경우는 없기때문에, 

if문이나 switch문 등을 통해 원하는 parameter를 세팅해서 리턴해주는 함수를 만들도록 하겠습니다.

 

다음은 예시입니다.

const getRequestParams = ({ type, to, data }) => {
  if (type === 'food') {
    return {
      templateCode: type,
      plusFriendId: process.env.MyChannelId,
      messages: [
        {
          to,
          content: `내가 만든 ${ data.food }는 맛있습니다.`,
          buttons: [
            {
              type: 'WL',
              name: '레시피 확인',
              linkMobile: 'https://food.tech.kr',
              linkPC: 'https://food.tech.kr',
            }
          ]
        }
      ]
    }
  }
  
  if (type === 'car') {
    return {
      ...
    }
  }
  
  ...
}

간단히 이런식으로 작성해 나갈수 있겠죠?

switch문으로 하면 더 깔끔할수 있겠네요.

 

이제 정말 마지막입니다.

4탄에 걸쳐서 포스팅을 하고있지만, 막상 해보면 1시간도 안걸려 끝날것입니다.

(시행착오를 겪은 제입장에서는 반나절은 썼지만요..)

 

자, 요청을 해봅시다!

const sendKakaoMessage = async ({ templateCode, to, data }) => {
  const params = getRequestParams({ type: templateCode, to, data });
  
  const { data: result } = await axios.post(`https://sens.apigw.ntruss.com/alimtalk/v2/services/${process.env.NAVER_CHANNEL}/messages`, params, {
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
      'x-ncp-apigw-timestamp': Date.now().toString(),
      'x-ncp-iam-access-key': process.env.NAVER_ACCESSKEY,
      'x-ncp-apigw-signature-v2': makeSignature(),
    },
  });
  
  console.log('과연? ', result);
}

 

어떤가요? 잘 되셨나요?

여기까지 따라오느냐 고생많으셨습니다.

유료서비스 안녕, 이제는 무료로 카톡의 좋은 서비스 이용하시기 바랍니다.

--- 수정 ---

미흡한 포스팅으로 혼란을 야기해드렸다면 죄송합니다. ㅜㅜ

제가 언급한 무료라는 것은, 중간에 API서비스 업체를 끼지 않고도 직접 알림톡을 구현함으로써

API업체를 끼는 비용을 무료로 가져갈수 있다는 얘기였습니다.

-----------

 

ps. 오랜만에 정성스러운 포스팅이네요. 반응보고 앞으로 방향성을 갖도록 하겠습니다.

728x90
반응형