amocrm-rails 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3bc05a6130ce9c1517987f919c9cea7899763b658113095523a8666bd6347a9
4
- data.tar.gz: f1233ee73dfc1d46bc6d29ebb86bd5626c2be6d5bf7119a617dacc78fc4e099c
3
+ metadata.gz: 62e5324a456fdc52f8455190fdc7c5d55e3cca449c837259366c732e3f11ffc0
4
+ data.tar.gz: 13cf6d39b9b5c6b824fa53b476aeae5d8e6b056c1b36fb6bdea12e0435624a4a
5
5
  SHA512:
6
- metadata.gz: bd796c99c3f4a4931693a6065c0127aab66335547b14c8632bd9c6e5ba7237b155e07f0c77fdd820d2039f500d4d319aa86e11b79027b33a4172355d677d663f
7
- data.tar.gz: 9b179d31d65a7c4ff53edfcbf4a610151698b39e0759caa9251c2a4671eb1f2925993996071cd0f805cd875c66eda3ee00f30c9f5d10f8aad8585d49754e1fa0
6
+ metadata.gz: e0bc864c80a9adee3e062b17978074dae509ec67a6d656cb7f5989945a7c6981a7b8b0f55e789b1a445567af8c76f4909af156270481b112fb61119ae77be52f
7
+ data.tar.gz: 7acd4c01f0d42cbc3168f26b2cf2c2589b1a26818c4d624891abde8cc889e65b45d3040d398c56edb3cec73498b026c96e0258136475f964f8488c4e6e442a54
data/README.markdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Оглавление
4
4
  0. [Установка](#install)
5
+ 1. [Упрощенная авторизация](#easy_auth)
6
+ 2. [Авторизация через перенаправления пользователя (требуется gem Devise)](#devise_auth)
5
7
  1. [Параметры аккаунта](#account)
6
8
  2. [Сделки](#leads)
7
9
  1. [Список сделок](#leads_retrieve)
@@ -166,9 +168,57 @@
166
168
 
167
169
  и запустите `bundle install`.
168
170
 
169
- Затем: `rails g amocrm_rails:install`
171
+ Для упрощенной авторизации:
170
172
 
171
- В файл `config/amocrm.yml` вставьте ваши данные.
173
+ `rails g amocrm_rails:install`
174
+
175
+ Для авторизации через перенаправление пользователя (требуется [gem devise](https://github.com/heartcombo/devise)):
176
+
177
+ `rails g amocrm_rails:install --with=devise`
178
+
179
+ ### Получение CLIENT_ID, CLIENT_SECRET и CODE
180
+
181
+ #### <a name="easy_auth"></a> Упрощенная авторизация
182
+
183
+ 1. Переходим на страницу интеграций https://yourdomain.amocrm.ru/settings/widgets/ и нажимаем "+ СОЗДАТЬ ИНТЕГРАЦИЮ"
184
+ ![alt Страница виджетов](https://storage.deppa.ru/uploads/widgets.png)
185
+ 2. Заполняем поля, в первое поле вводим https://yourdomain.com/amocrm и нажимаем "Сохранить"
186
+ ![alt Создание интеграции](https://storage.deppa.ru/uploads/widget_add.png)
187
+ 3. Переходим на таб "Ключи и доступы". Код авторизации работает 20 минут.
188
+ ![alt Создание интеграции](https://storage.deppa.ru/uploads/widget_keys.png)
189
+
190
+ В файл `config/amocrm.yml` вставляем данные.
191
+
192
+ #### <a name="devise_auth"></a> Авторизация через перенаправления пользователя (требуется [gem Devise](https://github.com/heartcombo/devise))
193
+
194
+ Выполняем все шаги как при [упрощенной авторизации](#easy_auth)
195
+
196
+ Ссылка на получение кода:
197
+ ```rhtml
198
+ <%= link_to "Установить интеграцию",
199
+ amocrm_oauth_url(state: current_user.try(:id)),
200
+ class: 'btn btn-primary' %>
201
+ ```
202
+ Пример доступен по адресу:
203
+ `
204
+ https://yourdomain/amocrm/link
205
+ `
206
+
207
+ ![alt Страница с кнопкой](https://storage.deppa.ru/uploads/amo_link.png)
208
+
209
+ Нажимаем на кнопку, логинимся в амо и даём права приложению
210
+
211
+ ![alt Авторизация в amo](https://storage.deppa.ru/uploads/amo_form.png)
212
+
213
+ После вы будуте перенаправлены на страницу https://yourdomain.com/amocrm
214
+
215
+ ![alt Страница с кнопкой](https://storage.deppa.ru/uploads/amo_code.png)
216
+
217
+ Если вы увидили код - всё в порядке, копировать код нет необходимости, страницу можно закрыть.
218
+
219
+ Если вы не используете [gem Devise](https://github.com/heartcombo/devise), то вам необходимо реализовать в
220
+ application_controller.rb методы `current_user` для получения текущего пользователя, `user_signed_in?` для проверки
221
+ авторизован ли посетитель на вашем сайте и `new_user_session_path` для получения пути к странице авторизции.
172
222
 
173
223
  Вы можете изменять `timeout`, `open_timeout`, `faraday_adapter`, `proxy`, `symbolize_keys`, `logger`, и `debug`:
174
224
 
@@ -298,7 +348,7 @@ p(response.body)
298
348
  ```ruby
299
349
  body = [
300
350
  {
301
- source_name: "ОАО Коспромсервис",
351
+ source_name: "ООО Деппа",
302
352
  source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
303
353
  created_at: 1510261200,
304
354
  _embedded: {
@@ -315,7 +365,7 @@ body = [
315
365
  ],
316
366
  companies: [
317
367
  {
318
- name: "ОАО Коспромсервис"
368
+ name: "ООО Деппа"
319
369
  }
320
370
  ]
321
371
  },
@@ -324,7 +374,7 @@ body = [
324
374
  uniq: "a1fe231cc88e64ba2e8822ba2b3ewrw",
325
375
  duration: 54,
326
376
  service_code: "CkAvbEwPam6sad",
327
- link: "https://example.com",
377
+ link: "https://deppa.ru",
328
378
  phone: 79998888888,
329
379
  called_at: 1510261200,
330
380
  from: "onlinePBX"
@@ -339,7 +389,7 @@ p(response.body)
339
389
  ```ruby
340
390
  body = [
341
391
  {
342
- source_name: "ОАО Коспромсервис",
392
+ source_name: "ООО Деппа",
343
393
  source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
344
394
  created_at: 1590830520,
345
395
  _embedded: {
@@ -376,7 +426,7 @@ body = [
376
426
  ],
377
427
  companies: [
378
428
  {
379
- name: "ОАО Коспромсервис"
429
+ name: "ООО Деппа"
380
430
  }
381
431
  ]
382
432
  },
@@ -385,7 +435,7 @@ body = [
385
435
  form_id: "a1fee7c0fc436088e64ba2e8822ba2b3ewrw",
386
436
  form_sent_at: 1590830520,
387
437
  form_name: "Форма заявки для полёта в космос",
388
- form_page: "https://example.com",
438
+ form_page: "https://deppa.ru",
389
439
  referer: "https://www.google.com/search?&q=elon+musk"
390
440
  }
391
441
  }
@@ -561,7 +611,7 @@ contacts = response.body[:_embedded][:contacts]
561
611
  ```ruby
562
612
  params = {
563
613
  filter: {
564
- name: "ОАО Коспромсервис"
614
+ name: "ООО Деппа"
565
615
  }
566
616
  }
567
617
  response = AmocrmRails::Request.companies.retrieve(params: params)
@@ -1376,21 +1426,21 @@ tag_id = tags.first[:id]
1376
1426
  ### <a name="add_tags_to_entity"></a> [Добавление тегов к сущности](https://www.amocrm.ru/developers/content/crm_platform/tags-api#add-tags-to-entity)
1377
1427
  ```ruby
1378
1428
  body_item = {
1379
- "_embedded": {
1380
- "tags": [
1429
+ _embedded: {
1430
+ tags: [
1381
1431
  {
1382
- "id": tag_id
1432
+ id: tag_id
1383
1433
  }
1384
1434
  ]
1385
1435
  }
1386
1436
  }
1387
1437
  body = [
1388
1438
  {
1389
- "id": object_id,
1390
- "_embedded": {
1391
- "tags": [
1439
+ id: object_id,
1440
+ _embedded: {
1441
+ tags: [
1392
1442
  {
1393
- "id": tag_id
1443
+ id: tag_id
1394
1444
  }
1395
1445
  ]
1396
1446
  }
@@ -1417,15 +1467,15 @@ AmocrmRails::Request.contacts(customer_id).update(body: body_item)
1417
1467
 
1418
1468
  ```ruby
1419
1469
  body_item = {
1420
- "_embedded": {
1421
- "tags": nil
1470
+ _embedded: {
1471
+ tags: nil
1422
1472
  }
1423
1473
  }
1424
1474
  body = [
1425
1475
  {
1426
- "id": object_id,
1427
- "_embedded": {
1428
- "tags": nil
1476
+ id: object_id,
1477
+ _embedded: {
1478
+ tags: nil
1429
1479
  }
1430
1480
  }
1431
1481
  ]
@@ -1591,7 +1641,7 @@ body = [
1591
1641
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1592
1642
  duration: 60,
1593
1643
  source: "onlinePBX",
1594
- link: "https://example.com",
1644
+ link: "https://deppa.ru",
1595
1645
  phone: "+79999999999"
1596
1646
  }
1597
1647
  },
@@ -1602,7 +1652,7 @@ body = [
1602
1652
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1603
1653
  duration: 60,
1604
1654
  source: "onlinePBX",
1605
- link: "https://example.com",
1655
+ link: "https://deppa.ru",
1606
1656
  phone: "+79999999999"
1607
1657
  }
1608
1658
  },
@@ -1624,7 +1674,7 @@ body_item = {
1624
1674
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1625
1675
  duration: 60,
1626
1676
  source: "onlinePBX",
1627
- link: "https://example.com",
1677
+ link: "https://deppa.ru",
1628
1678
  phone: "+79999999999"
1629
1679
  }
1630
1680
  }
@@ -1662,7 +1712,7 @@ body = [
1662
1712
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1663
1713
  duration: 60,
1664
1714
  source: "onlinePBX",
1665
- link: "https://example.com",
1715
+ link: "https://deppa.ru",
1666
1716
  phone: "+79999999999"
1667
1717
  }
1668
1718
  },
@@ -1673,7 +1723,7 @@ body = [
1673
1723
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1674
1724
  duration: 60,
1675
1725
  source: "onlinePBX",
1676
- link: "https://example.com",
1726
+ link: "https://deppa.ru",
1677
1727
  phone: "+79999999999"
1678
1728
  }
1679
1729
  },
@@ -1695,7 +1745,7 @@ body_item = {
1695
1745
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1696
1746
  duration: 60,
1697
1747
  source: "onlinePBX",
1698
- link: "https://example.com",
1748
+ link: "https://deppa.ru",
1699
1749
  phone: "+79999999999"
1700
1750
  }
1701
1751
  }
@@ -1858,7 +1908,6 @@ response = AmocrmRails::Request.customers.transactions(transaction_id).delete
1858
1908
  p(response.body)
1859
1909
  ```
1860
1910
  ### <a name="customer_bonus_points_update"></a> [Списание/начисление бонусных баллов покупателю](https://www.amocrm.ru/developers/content/crm_platform/customers-api#customer–bonus-points-update)
1861
-
1862
1911
  ```ruby
1863
1912
  body = {
1864
1913
  earn: 500
@@ -1876,48 +1925,362 @@ status_id = statuses.first[:id]
1876
1925
  ### <a name="customers_statuses_detail"></a> [Получение статуса покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-detail)
1877
1926
  ```ruby
1878
1927
  response = AmocrmRails::Request.customers.statuses(status_id).retrieve
1928
+ status = response.body
1929
+ ```
1930
+ ### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
1931
+ ```ruby
1932
+ body = [
1933
+ {
1934
+ name: "Новый статус",
1935
+ sort: 100,
1936
+ color: "#fffeb2"
1937
+ },
1938
+ {
1939
+ name: "Новый статус 2",
1940
+ sort: 200,
1941
+ color: "#fffeb2"
1942
+ }
1943
+ ]
1944
+ response = AmocrmRails::Request.customers.statuses.create(body: body)
1945
+ p(response.body)
1879
1946
  statuses = response.body[:_embedded][:statuses]
1880
1947
  status_id = statuses.first[:id]
1881
1948
  ```
1882
- ### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
1883
1949
  ### <a name="customers_statuses_edit"></a> [Редактирование статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-status-edit)
1950
+ ```ruby
1951
+ body = {
1952
+ name: "Новое название для статуса",
1953
+ color: "#c1e0ff"
1954
+ }
1955
+ response = AmocrmRails::Request.customers.statuses(status_id).update(body: body)
1956
+ customer = response.body
1957
+ ```
1884
1958
  ### <a name="customer_status_delete"></a> [Удаление статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-delete)
1959
+ ```ruby
1960
+ AmocrmRails::Request.customers.statuses(status_id).delete
1961
+ ```
1885
1962
  ### <a name="segments_list"></a> [Список сегментов покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-list)
1963
+ ```ruby
1964
+ response = AmocrmRails::Request.customers.segments
1965
+ segments = response.body[:_embedded][:segments]
1966
+ segment_id = segments.first[:id]
1967
+ ```
1886
1968
  ### <a name="segments_detail"></a> [Получение сегмента покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-detail)
1969
+ ```ruby
1970
+ response = AmocrmRails::Request.customers.segments(segment_id).retrieve
1971
+ segment = response.body
1972
+ ```
1887
1973
  ### <a name="segments_add"></a> [Добавление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-add)
1974
+ ```ruby
1975
+ body = {
1976
+ name: "Сегмент для примера",
1977
+ color: "ae003f"
1978
+ }
1979
+ response = AmocrmRails::Request.customers.segments.create(body: body)
1980
+ p(response.body)
1981
+ segment = response.body
1982
+ segment_id = segment[:id]
1983
+ ```
1888
1984
  ### <a name="segments_edit"></a> [Редактирование сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-edit)
1985
+ ```ruby
1986
+ body = {
1987
+ name: "Новое имя для сегмента",
1988
+ color: "ae003f"
1989
+ }
1990
+ response = AmocrmRails::Request.customers.segments(segment_id).update(body: body)
1991
+ segment = response.body
1992
+ ```
1889
1993
  ### <a name="segment_delete"></a> [Удаление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-delete)
1994
+ ```ruby
1995
+ AmocrmRails::Request.customers.segments(segment_id).delete
1996
+ ```
1890
1997
  ### <a name="customers_statuses_colors"></a> [Доступные цвета статусов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-colors)
1891
1998
  ### <a name="customers_statuses_colors"></a> [Доступные цвета сегментов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-colors)
1892
1999
 
1893
2000
  ## <a name="users"></a> [Пользователи](https://www.amocrm.ru/developers/content/crm_platform/users-api)
1894
2001
  ### <a name="users_list"></a> [Список пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-list)
2002
+ ```ruby
2003
+ params = {
2004
+ with: 'group',
2005
+ page: 0,
2006
+ limit: 10
2007
+ }
2008
+ response = AmocrmRails::Request.users.retrieve
2009
+ users = response.body[:_embedded][:users]
2010
+ user_id = users.first[:id]
2011
+ ```
1895
2012
  ### <a name="users_detail"></a> [Получение пользователя по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#user-detail)
2013
+ ```ruby
2014
+ params = {
2015
+ with: 'group'
2016
+ }
2017
+ response = AmocrmRails::Request.users(user_id).retrieve(params: params)
2018
+ user = response.body
2019
+ user_id = user[:id]
2020
+ ```
1896
2021
  ### <a name="users_add"></a> [Добавление пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-add)
2022
+ ```ruby
2023
+ body = [
2024
+ {
2025
+ name: "Павел Осетров",
2026
+ email: 'pavel.osetrov@me.com'
2027
+ }
2028
+ ]
2029
+ response = AmocrmRails::Request.users.create(body: body)
2030
+ p(response.body)
2031
+ users = response.body[:_embedded][:users]
2032
+ user_id = users.first[:id]
2033
+ ```
1897
2034
  ### <a name="roles_list"></a> [Список ролей пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-list)
2035
+ ```ruby
2036
+ params = {
2037
+ with: 'users',
2038
+ page: 0,
2039
+ limit: 10
2040
+ }
2041
+ response = AmocrmRails::Request.roles.retrieve
2042
+ roles = response.body[:_embedded][:roles]
2043
+ role_id = roles.first[:id]
2044
+ ```
1898
2045
  ### <a name="roles_detail"></a> [Получение роли по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-detail)
2046
+ ```ruby
2047
+ params = {
2048
+ with: 'users'
2049
+ }
2050
+ response = AmocrmRails::Request.roles(role_id).retrieve(params: params)
2051
+ role = response.body
2052
+ role_id = user[:id]
2053
+ ```
1899
2054
  ### <a name="roles_add"></a> [Добавление ролей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-add)
2055
+ ```ruby
2056
+ body = [
2057
+ {
2058
+ name: "role 3",
2059
+ rights: {
2060
+ leads: {
2061
+ add: "A",
2062
+ edit: "G",
2063
+ view: "G",
2064
+ delete: "G",
2065
+ export: "G"
2066
+ },
2067
+ tasks: {
2068
+ edit: "A",
2069
+ delete: "A"
2070
+ },
2071
+ contacts: {
2072
+ add: "A",
2073
+ edit: "A",
2074
+ view: "A",
2075
+ delete: "A",
2076
+ export: "A"
2077
+ },
2078
+ companies: {
2079
+ add: "A",
2080
+ edit: "A",
2081
+ view: "A",
2082
+ delete: "A",
2083
+ export: "A"
2084
+ },
2085
+ mail_access: true,
2086
+ status_rights: [
2087
+ {
2088
+ entity_type: "leads",
2089
+ pipeline_id: 16056,
2090
+ status_id: 20542166,
2091
+ rights: {
2092
+ edit: "A",
2093
+ view: "A",
2094
+ delete: "A",
2095
+ export: "A"
2096
+ }
2097
+ }
2098
+ ],
2099
+ catalog_access: true
2100
+ }
2101
+ }
2102
+ ]
2103
+ response = AmocrmRails::Request.roles.create(body: body)
2104
+ p(response.body)
2105
+ roles = response.body[:_embedded][:roles]
2106
+ role_id = roles.first[:id]
2107
+ ```
1900
2108
  ### <a name="roles_edit"></a> [Редактирование роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-edit)
2109
+ ```ruby
2110
+ body = {
2111
+ name: "role 3 modified",
2112
+ rights: {
2113
+ contacts: {
2114
+ add: "A",
2115
+ edit: "D",
2116
+ view: "D",
2117
+ delete: "D",
2118
+ export: "D"
2119
+ },
2120
+ status_rights: nil
2121
+ }
2122
+ }
2123
+ response = AmocrmRails::Request.roles(role_id).update(body: body)
2124
+ role = response.body
2125
+ ```
2126
+
1901
2127
  ### <a name="roles_delete"></a> [Удаление роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-delete)
2128
+ ```ruby
2129
+ AmocrmRails::Request.roles(role_id).delete
2130
+ ```
1902
2131
  ### <a name="users_common_rights"></a> [Общие обозначения прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#common-rights)
1903
2132
  ### <a name="users_rights_dependence"></a> [Зависимости прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#rights-dependence)
1904
2133
 
1905
2134
  ## <a name="products"></a> [Товары](https://www.amocrm.ru/developers/content/crm_platform/products-api)
1906
2135
  ## <a name="webhooks"></a> [Вебхуки](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api)
1907
2136
  ### <a name="webhooks_list"></a> [Список установленных вебхуков в аккаунте](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-list)
2137
+ ```ruby
2138
+ response = AmocrmRails::Request.webhooks.retrieve
2139
+ webhooks = response.body[:_embedded][:webhooks]
2140
+ webhook_id = webhooks.first[:id]
2141
+ ```
1908
2142
  ### <a name="webhooks_subscribe"></a> [Подписка на вебхук](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhook-subscribe)
2143
+ ```ruby
2144
+ body = {
2145
+ destination: "https://deppa.ru",
2146
+ settings: [
2147
+ "add_lead"
2148
+ ],
2149
+ sort: 10
2150
+ }
2151
+ response = AmocrmRails::Request.webhooks.create(body: body)
2152
+ p(response.body)
2153
+ webhook = response.body
2154
+ webhook_id = webhook[:id]
2155
+ ```
1909
2156
  ### <a name="webhooks_delete"></a> [Отписка от событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-delete)
2157
+ ```ruby
2158
+ AmocrmRails::Request.webhooks(webhook_id).delete
2159
+ ```
1910
2160
  ### <a name="webhooks_available_actions"></a> [Возможные событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-available-actions)
1911
2161
 
1912
2162
  ## <a name="widgets"></a> [Виджеты](https://www.amocrm.ru/developers/content/crm_platform/widgets-api)
1913
2163
  ### <a name="widgets_list"></a> [Список виджетов](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widgets-list)
2164
+ ```ruby
2165
+ params = {
2166
+ page: 0,
2167
+ limit: 10
2168
+ }
2169
+ response = AmocrmRails::Request.widgets.retrieve
2170
+ widgets = response.body[:_embedded][:widgets]
2171
+ widget_code = widgets.first[:code]
2172
+ ```
1914
2173
  ### <a name="widgets_detail"></a> [Информация о виджете по его коду](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-detail)
2174
+ ```ruby
2175
+ response = AmocrmRails::Request.widgets(widget_code).retrieve
2176
+ widget = response.body
2177
+ ```
1915
2178
  ### <a name="widgets_install"></a> [Установка виджета в аккаунт](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-install)
2179
+ ```ruby
2180
+ body = {
2181
+ login: "example",
2182
+ password: "eXaMp1E",
2183
+ script_path: "https://deppa.ru/"
2184
+ }
2185
+ response = AmocrmRails::Request.widgets.create(body: body)
2186
+ p(response.body)
2187
+ widget = response.body
2188
+ ```
1916
2189
  ### <a name="widgets_uninstall"></a> [Удаление установки виджета](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-uninstall)
2190
+ ```ruby
2191
+ AmocrmRails::Request.widgets(widget_code).delete
2192
+ ```
1917
2193
  ### <a name="widgets_continue"></a> [Подтверждение выполнения блока виджета в Salesbot](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-continue)
1918
-
2194
+ ```ruby
2195
+ body = {
2196
+ data: {
2197
+ status: "success"
2198
+ },
2199
+ execute_handlers: [
2200
+ {
2201
+ handler: "show",
2202
+ params: {
2203
+ type: "text",
2204
+ value: "Здесь текст"
2205
+ }
2206
+ },
2207
+ {
2208
+ handler: "show",
2209
+ params: {
2210
+ type: "buttons",
2211
+ value: "Нажми на кнопку",
2212
+ buttons: [
2213
+ "1ая кнопка",
2214
+ "2ая кнопка",
2215
+ "3ая кнопка",
2216
+ "4ая кнопка"
2217
+ ]
2218
+ }
2219
+ },
2220
+ {
2221
+ handler: "show",
2222
+ params: {
2223
+ type: "buttons_url",
2224
+ value: "Кнопки со ссылками",
2225
+ buttons: [
2226
+ "https://amocrm.ru",
2227
+ "https://deppa.ru"
2228
+ ]
2229
+ }
2230
+ },
2231
+ {
2232
+ handler: "goto",
2233
+ params: {
2234
+ type: "question|answer|finish",
2235
+ step: 5
2236
+ }
2237
+ }
2238
+ ]
2239
+ }
2240
+ AmocrmRails::Request.salesbot(bot_id).continue(continue_id).create(body: body)
2241
+ AmocrmRails::Request.marketingbot(bot_id).continue(continue_id).create(body: body)
2242
+ ```
1919
2243
  ## <a name="calls"></a> [Добавление звонков](https://www.amocrm.ru/developers/content/crm_platform/calls-api)
1920
-
2244
+ ```ruby
2245
+ body = [
2246
+ {
2247
+ duration: 10,
2248
+ source: "example_integration",
2249
+ phone: "123123",
2250
+ link: "https://deppa.ru/audio.mp3",
2251
+ direction: "inbound",
2252
+ call_result: "Успешный разговор",
2253
+ call_status: 4
2254
+ }
2255
+ ]
2256
+ response = AmocrmRails::Request.calls.create(body: body)
2257
+ p(response.body)
2258
+ calls = response.body[:_embedded][:calls]
2259
+ ```
1921
2260
  ## <a name="salesbot"></a> [Salebot](https://www.amocrm.ru/developers/content/api/salesbot-api)
1922
-
2261
+ ```ruby
2262
+ body = [
2263
+ {
2264
+ bot_id: 565,
2265
+ entity_id: 76687686,
2266
+ entity_type: 1
2267
+ }
2268
+ ]
2269
+ response = AmocrmRails::Request.salesbot.run.create(body: body)
2270
+ p(response.body)
2271
+ ```
1923
2272
  ## <a name="short_links"></a> [Короткие ссылки](https://www.amocrm.ru/developers/content/crm_platform/short_links)
2273
+ ```ruby
2274
+ body = [
2275
+ {
2276
+ url:"https://deppa.ru",
2277
+ metadata:{
2278
+ entity_type:"contacts",
2279
+ entity_id:11070881
2280
+ }
2281
+ }
2282
+ ]
2283
+ response = AmocrmRails::Request.short_links.create(body: body)
2284
+ p(response.body)
2285
+ short_links = response.body[:_embedded][:short_links]
2286
+ ```
data/lib/amocrm-rails.rb CHANGED
@@ -2,11 +2,17 @@ require 'amocrm-rails/amocrm_error'
2
2
  require 'amocrm-rails/request'
3
3
  require 'amocrm-rails/api_request'
4
4
  require 'amocrm-rails/response'
5
+ require 'concern'
6
+ require 'helper'
5
7
 
6
8
  module AmocrmRails
7
9
  class << self
8
- def generate_access_token(client_id=AmocrmRails.client_id, client_secret=AmocrmRails.client_secret, refresh_token=nil, count=0)
9
- refresh_token ||= AmocrmRails.try(:refresh_token)
10
+ def generate_access_token(**options)
11
+ user_id = AmocrmRails.try(:user_id)
12
+ client_id = options[:client_id] || AmocrmRails.client_id
13
+ client_secret = options[:client_secret] || AmocrmRails.client_secret
14
+ refresh_token = options[:refresh_token] || AmocrmRails.try(:refresh_token)
15
+ count = options[:count].to_i
10
16
  params = {
11
17
  client_id: client_id,
12
18
  client_secret: client_secret,
@@ -30,12 +36,20 @@ module AmocrmRails
30
36
  response_token = JSON.parse(response.body)
31
37
  data = YAML.load_file("config/amocrm_token.yml")
32
38
  response_token.each do |k, v|
33
- data[k] = v
34
- AmocrmRails::register k.underscore.to_sym, v
39
+ if user_id.present?
40
+ data[user_id] = {} if data[user_id].nil?
41
+ data[user_id][k] = v
42
+ else
43
+ data[k] = v
44
+ end
45
+ AmocrmRails::register(k.underscore.to_sym, v)
35
46
  end
36
47
  File.open("config/amocrm_token.yml", 'w') { |f| YAML.dump(data, f) }
37
48
  elsif count < 3 && AmocrmRails.refresh_token.present?
38
- AmocrmRails.generate_access_token(client_id, client_secret, AmocrmRails.refresh_token, count+1)
49
+ AmocrmRails.generate_access_token(client_id: client_id,
50
+ client_secret: client_secret,
51
+ refresh_token:AmocrmRails.refresh_token,
52
+ count: count+1)
39
53
  end
40
54
  end
41
55
 
@@ -14,10 +14,10 @@ module AmocrmRails
14
14
  end
15
15
  parse_response(response)
16
16
  rescue => e
17
- if e.response.try(:code) == 401 && first_time
17
+ if [401, 402].include?(e.response.dig(:status)) && first_time
18
18
  AmocrmRails.generate_access_token
19
19
  self.post(params: params, headers: headers, body: body, first_time: false)
20
- elsif e.response.try(:code) == 429
20
+ elsif e.response.dig(:status) == 429
21
21
  sleep(1.second)
22
22
  self.post(params: params, headers: headers, body: body, first_time: false)
23
23
  else
@@ -35,10 +35,10 @@ module AmocrmRails
35
35
  end
36
36
  parse_response(response)
37
37
  rescue => e
38
- if e.response.try(:code) == 401 && first_time
38
+ if [401, 402].include?(e.response.dig(:status)) && first_time
39
39
  AmocrmRails.generate_access_token
40
40
  self.patch(params: params, headers: headers, body: body, first_time: false)
41
- elsif e.response.try(:code) == 429
41
+ elsif e.response.try(:status) == 429
42
42
  sleep(1.second)
43
43
  self.patch(params: params, headers: headers, body: body, first_time: false)
44
44
  else
@@ -56,10 +56,10 @@ module AmocrmRails
56
56
  end
57
57
  parse_response(response)
58
58
  rescue => e
59
- if e.response.try(:code) == 401 && first_time
59
+ if [401, 402].include?(e.response.dig(:status)) && first_time
60
60
  AmocrmRails.generate_access_token
61
61
  self.put(params: params, headers: headers, body: body, first_time: false)
62
- elsif e.response.try(:code) == 429
62
+ elsif e.response.dig(:status) == 429
63
63
  sleep(1.second)
64
64
  self.put(params: params, headers: headers, body: body, first_time: false)
65
65
  else
@@ -77,10 +77,10 @@ module AmocrmRails
77
77
  end
78
78
  parse_response(response)
79
79
  rescue => e
80
- if e.response.try(:code) == 401 && first_time
80
+ if [401, 402].include?(e.response.dig(:status)) && first_time
81
81
  AmocrmRails.generate_access_token
82
82
  self.get(params: params, headers: headers, first_time: false)
83
- elsif e.response.try(:code) == 429
83
+ elsif e.response.try(:status) == 429
84
84
  sleep(1.second)
85
85
  self.get(params: params, headers: headers, body: body, first_time: false)
86
86
  else
@@ -98,10 +98,10 @@ module AmocrmRails
98
98
  end
99
99
  parse_response(response)
100
100
  rescue => e
101
- if e.response.try(:code) == 401 && first_time
101
+ if [401, 402].include?(e.response.dig(:status)) && first_time
102
102
  AmocrmRails.generate_access_token
103
103
  self.delete(params: params, headers: headers, first_time: false)
104
- elsif e.response.try(:code) == 429
104
+ elsif e.response.try(:stattus) == 429
105
105
  sleep(1.second)
106
106
  self.delete(params: params, headers: headers, body: body, first_time: false)
107
107
  else
data/lib/concern.rb ADDED
@@ -0,0 +1,30 @@
1
+ module AmocrmRails
2
+ module Concern
3
+ extend ActiveSupport::Concern
4
+
5
+ private
6
+
7
+ def update_auth_code
8
+ if user_signed_in?
9
+ AmocrmRails::register :user_id, current_user.id
10
+ if File.exist?('config/amocrm.yml')
11
+ data = YAML.load_file('config/amocrm.yml')
12
+ return nil if data.dig(Rails.env, current_user.id).nil?
13
+ data[Rails.env][current_user.id].each do |k, v|
14
+ AmocrmRails::register k.underscore.to_sym, v
15
+ end
16
+
17
+ if File.exist?('config/amocrm_token.yml')
18
+ token_data = YAML.load_file("config/amocrm_token.yml")
19
+ token_data[current_user.id] = {} if data.dig(current_user.id).nil?
20
+ token_data[current_user.id].each do |k, v|
21
+ config::register k.underscore.to_sym, v
22
+ end
23
+ end
24
+
25
+ AmocrmRails.generate_access_token if AmocrmRails.access_token.nil? && AmocrmRails.code.present?
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -4,10 +4,31 @@ module AmocrmRails
4
4
  class InstallGenerator < Rails::Generators::Base
5
5
  source_root File.expand_path('templates', __dir__)
6
6
 
7
+ class_option :with, type: :string, default: ''
8
+
7
9
  def generate_install
8
- copy_file 'amocrm.yml', 'config/amocrm.yml'
10
+ with = options['with']
9
11
  copy_file 'amocrm_token.yml', 'config/amocrm_token.yml'
10
- copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
12
+
13
+ if with.to_s.downcase == 'devise'
14
+ copy_file 'devise/app/controllers/amocrm_controller.rb', 'app/controllers/amocrm_controller.rb'
15
+ copy_file 'devise/app/views/amocrm/code.html.erb', 'app/views/amocrm/code.html.erb'
16
+ copy_file 'devise/app/views/amocrm/link.html.erb', 'app/views/amocrm/link.html.erb'
17
+ copy_file 'devise/config/amocrm.yml', 'config/amocrm.yml'
18
+ copy_file 'devise/config/initializers/amocrm.rb', 'config/initializers/amocrm.rb'
19
+ route "get '/amocrm' => 'amocrm#code'"
20
+ route "get '/amocrm/link' => 'amocrm#link'"
21
+ route "post '/amocrm/webhook/:name' => 'amocrm#webhook'"
22
+
23
+ inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY'
24
+ include AmocrmRails::Concern
25
+ before_action :update_auth_code
26
+ RUBY
27
+ end
28
+ else
29
+ copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
30
+ copy_file 'amocrm.yml', 'config/amocrm.yml'
31
+ end
11
32
  end
12
33
  end
13
34
  end
@@ -2,14 +2,11 @@ defaults: &defaults
2
2
  CLIENT_ID: '***'
3
3
  CLIENT_SECRET: '***'
4
4
  CODE: '***'
5
- redirect_uri: https://yourdomain.ru
5
+ redirect_uri: https://yourdomain.ru/amocrm
6
6
  api_endpoint: https://yourdomain.amocrm.ru
7
- URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
8
- REDIRECT_URI: 'https://yourdomain.com'
7
+ URL_TOKEN: https://yourdomain.amocrm.ru/oauth2/access_token
9
8
  production:
10
9
  <<: *defaults
11
- URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
12
- REDIRECT_URI: 'https://yourdomain.ru'
13
10
  development:
14
11
  <<: *defaults
15
12
  test:
@@ -0,0 +1,33 @@
1
+ class AmocrmController < ApplicationController
2
+ before_action :authenticate_user!, except: [:webhook]
3
+
4
+ def link
5
+ end
6
+
7
+ def code
8
+ if current_user.id == params[:state].to_i
9
+ if File.exist?('config/amocrm.yml')
10
+ data = YAML.load_file('config/amocrm.yml')
11
+ data[Rails.env][current_user.id] = {} if data[Rails.env][current_user.id].nil?
12
+ params.each do |k, v|
13
+ data[Rails.env][current_user.id][k] = v
14
+ AmocrmRails::register k.underscore.to_sym, v
15
+ end
16
+ File.open("config/amocrm.yml", 'w') { |f| YAML.dump(data, f) }
17
+ end
18
+ end
19
+ @code = params[:code]
20
+ end
21
+
22
+ def webhook
23
+ webhook_name = params[:name]
24
+ end
25
+
26
+ private
27
+
28
+ def authenticate_user!
29
+ unless user_signed_in?
30
+ redirect_to new_user_session_path
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,6 @@
1
+ <div style="width: 100%; padding: 100px; text-align: center;">
2
+ Your code:
3
+ <code>
4
+ <%= @code %>
5
+ </code>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div style="width: 100%; padding: 100px; text-align: center;">
2
+
3
+ <%= link_to "Установить интеграцию",
4
+ amocrm_oauth_url(state: current_user.try(:id)),
5
+ class: 'btn btn-primary' %>
6
+ </div>
@@ -0,0 +1,16 @@
1
+ require 'amocrm'
2
+
3
+ AmocrmRails.setup do |config|
4
+ if File.exist?('config/amocrm.yml')
5
+ processed = YAML.load_file('config/amocrm.yml')[Rails.env]
6
+
7
+ processed.each do |k, v|
8
+ config::register k.underscore.to_sym, v
9
+ end
10
+
11
+ config::Request.timeout = 60
12
+ config::Request.open_timeout = 60
13
+ config::Request.symbolize_keys = true
14
+ config::Request.debug = false
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ require 'amocrm-rails'
2
+
3
+ AmocrmRails.setup do |config|
4
+ config::Request.timeout = 60
5
+ config::Request.open_timeout = 60
6
+ config::Request.symbolize_keys = true
7
+ config::Request.debug = false
8
+ end
data/lib/helper.rb ADDED
@@ -0,0 +1,5 @@
1
+ module AmocrmHelper
2
+ def amocrm_oauth_url(state: nil, mode: 'post_message', client_id: AmocrmRails::client_id)
3
+ "https://www.amocrm.ru/oauth?client_id=#{client_id}&mode=#{mode}&state=#{state}"
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amocrm-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Osetrov
@@ -52,11 +52,18 @@ files:
52
52
  - lib/amocrm-rails/request.rb
53
53
  - lib/amocrm-rails/response.rb
54
54
  - lib/amocrm-rails/version.rb
55
+ - lib/concern.rb
55
56
  - lib/generators/amocrm_rails/install/USAGE
56
57
  - lib/generators/amocrm_rails/install/install_generator.rb
57
58
  - lib/generators/amocrm_rails/install/templates/amocrm.rb
58
59
  - lib/generators/amocrm_rails/install/templates/amocrm.yml
59
60
  - lib/generators/amocrm_rails/install/templates/amocrm_token.yml
61
+ - lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
62
+ - lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb
63
+ - lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb
64
+ - lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb
65
+ - lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb
66
+ - lib/helper.rb
60
67
  homepage: https://github.com/osetrov/amocrm
61
68
  licenses:
62
69
  - MIT