Парсинг входящего письма

Встала примерно следующая задача настройки OpenERP.
На почту приходят заявки от клиентов по определённой форме. Пример тела сообщения:
Имя: Иванов
Фамилия: Иван
Отчество: Иванович
Год рождения: 1978
Ваш уровень образования: Неоконченное высшее
Город: Томск
Контактный телефон: +100500
E-mail: ivanov@example.com
Так как все письма присылают по похожей форме, было бы удобно, чтобы в системе автоматически создавался кандидат с данными, полученными из письма. Основные поля: ФИО, телефон, почта.

Решение:
  1. Для сервера входящей почты настроить действие «Создать новую запись» — crm.lead.

  2. Создать «Server Action». Параметры: объект — «crm.lead», тип «python code».

  3. Далее необходимо написать функцию парсинга. Небольшой пример:
    
    def parse_description(description):
        fields=[u'имя',u'телефон']
        _dict={}
        description=description.lower()
        for line in description.split('\n'):
            for field in fields:
                if field in line:
                    split_line=line.split(':')
                    if len(split_line)>1:
                        pre_dict[field]=line.split(':')[1]
        _dict['name']=pre_dict.get(u'имя')
        _dict['phone']=pre_dict.get(u'телефон')
        return _dict
    
    lead=self.browse(cr,uid,context['active_id'],context=context)   #поиск записи
    description=lead['description']                                 #Извлечение тела письма
    _dict=parse_description(description)                            #парсинг
    
    self.write(cr,uid,context['active_id'],{      #сохранение
                            'partner_name':_dict.get('name'),
                            'contact_name':_dict.get('name'),
                            'phone':_dict.get(u'phone'),
                            'mobile':_dict.get(u'phone')})
    


Спасибо за помощь форумчанам по работе с записью: http://www.openerp.com/forum/topic32200.html
Так же я кратно описал решение здесь: http://www.openerp.com/forum/topic31871.html (сначала я сам его искал, но ни кто не ответил, я уж сам всё решил)

Некто «fhe» на форуме говорит(Ссылка на сообщение), что скоро выйдет модуль «fetchmail_pattern», который будет отлично решать такую задачу, но я не нашел подробной информации по нему.

4 комментария

avatar
отличный опыт!
avatar
Может имеет смысл выполнить его в виде своего модуля? и выложить здесь сылку? :) как вариант
avatar
Смысл есть. Но не понятно как обобщенно подойти к решению такой задачи. А что если форма входящего письма будет другая? Что если с некоторыми данными надо будет производить некие манипуляция?
avatar
Мое представление такое (постарался мыслить как можно обобщенно):

1. Чтоб создавался, не партнер первоначально, а кандидат.
2. Требуемое поле тема(тема письма), почтовый ящик (надо чтоб было условие проверки на наличии почтового адреса в системе), имя, телефон и другие атрибуты выбрать если их явно можно выбрать.
3. Тело письма пусть выкладывается в заметки.

Такую функцию есть в vTigerCRM и называется Заявки, а уже с Заявок можно было вроде создать Кандидата или использовался Партнер если он присутствует в системе.

Можно выполнить в виде Заявка --> Кандидат --> Предложение --> Партнер или если существующий Партнер то Заявка --> Предложение для существующего Партнера.

Оставить комментарий