Как с помощю телеграм бота создать сделку в битрикс 24?

В телеграмме человек включает бота и появляется "опрос", введены человеком данные должны отправиться в Битрикс24, и создать там сделку. Это реально сделать? Подскажите в какую стороку копать.


Ответы (1 шт):

Автор решения: Violet

main.py:

import telebot
import requests

bot = telebot.TeleBot('123:AAA')

b24_url_token = 'http://localhost/b24'
b24_url_deal = 'https://domain.bitrix24.ru/rest/crm.deal.add.json'
b24_url_deal_product = 'https://domain.bitrix24.ru/rest/crm.deal.productrows.set.json'

b24_token = requests.post(b24_url_token).json()['access_token']


@bot.message_handler(commands=['start'])
def start(message):
    msg = bot.send_message(message.chat.id, 'Введите *название сделки*', parse_mode='Markdown')
    bot.register_next_step_handler(msg, start_2)


def start_2(message):
    msg = bot.send_message(message.chat.id, 'Введите *название продукта стоимость количество*\n_прим. Пряник 12 4', parse_mode='Markdown')
    bot.register_next_step_handler(msg, start_3, message.text)


def start_3(message, title_lead):
    product = message.text.split()[0]
    price = message.text.split()[1]
    quantity = message.text.split()[2]

    b24_crm_add = requests.post(b24_url_deal, json={'fields': {'TITLE': title_lead, 'ASSIGNED_BY_ID': 1}, 'auth': b24_token})
    b24_crm_add_product = requests.post(b24_url_deal_product, json={'id': 1, 'rows': [{"PRODUCT_ID": 1, 'PRODUCT_NAME': product, "PRICE": float(price), "QUANTITY": quantity}], 'auth': b24_token})

http://localhost/b24:

conf_b24_oauth_token.php:

<?php
return [
    'production' => [
        //идентификатор приложения
        'client_id' => 'local.5f***9.7***8',
        //секретный код приложения
        'client_secret' => '8cq***Sj7',
        'scope' => 'crm',
        //домен третьего уровня клиентского проекта в Bitrix24
        'domain' => 'domain.bitrix24.ru',
        //данные пользователя bitrix24
        'login' => 'user',
        'password' => 'password',
    ]
];
?>

index.php:

<?php
$config = require __DIR__.'/conf_b24_oauth_token.php';
$config = $config['production'];
$_url = 'https://'.$config['domain'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
preg_match('#name="backurl" value="(.*)"#', $res, $math);
$post = http_build_query([
    'AUTH_FORM' => 'Y',
    'TYPE' => 'AUTH',
    /* 'backurl' => $math[1], */
    'USER_LOGIN' => $config['login'],
    'USER_PASSWORD' => $config['password'],
    'USER_REMEMBER' => 'Y'
]);
curl_setopt($ch, CURLOPT_URL, 'https://www.bitrix24.net/auth/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
//end autorize
curl_setopt($ch, CURLOPT_URL, 'https://'.$config['domain'].'/oauth/authorize/?response_type=code&client_id='.$config['client_id']);
$res = curl_exec($ch);

$parts = parse_url($res); 
parse_str($parts['query'], $query);

$code = $query['code'];

curl_setopt($ch, CURLOPT_URL, 'https://'.$config['domain'].'/oauth/token/?grant_type=authorization_code&client_id='.$config['client_id'].'&client_secret='.$config['client_secret'].'&code='.$code.'&scope=crm');
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
echo $res;
?>
→ Ссылка